SlideShare ist ein Scribd-Unternehmen logo
1 von 11
Downloaden Sie, um offline zu lesen
numpy の魅力
工学部情報科学科 4 年 勝亦利宗
2018 年 八峰祭 Linux 研究会 LT 大会スライド
2
numpy とは何か
numpy は ,Python で数値計算を高速に行うライブラリ
3
numpy とは何か
numpy は ,Python で数値計算を高速に行うライブラリ
numpy は ,Python で大量の数値計算を高速に行うライブラリ
4
“ 大量の”とは ?
numpy は ,Python で数値計算を高速に行うライブラリ
numpy は ,Python で大量の数値計算を高速に行うライブラリ
何が違うの ?
→Python の事情を知る必要がある
5
なぜ numpy が必要 ?
Python は for ループが無茶苦茶遅い !
なぜ遅いのかは検索してください
どれほど遅いのか , 以下の問題を計算させてみて確かめてみる
のとき ,
m2
を求めよ . ( 内積の計算 )
問題 :
6
なぜ numpy が必要 ?
計算した結果
C++ 15s
Python 6m57s
Python では C++ の 23.8 倍の
計算時間がかかっている !
(time コマンドの real 値を参照しています )
仕事効率化しなきゃ
計測に使ったプログラムはここ
https://github.com/106-/numpy_test
7
なぜ numpy が必要 ?
計算した結果
C++ 15s
Python 6m57s
Python+numpy 2.5s
なんと C++ よりも早い結果
下手にガバガバなコードを書くよりも ,
numpy を使ったほうが早く動作しうる
しかも Python なのでコーディングも容易
→ 実際に記述の方法を見てみよう
8
なぜ numpy が必要 ?
行列の計算をとても簡単に記述できる !
– 行列の要素全てに 5 を掛けたい !
→ arr * 5
– 行列の要素全部の対数を取りたい !
→ np.log(arr)
– 行列の要素同士を掛け算したい !( アダマール積 )
→ arr1*arr2
– numpy では , 行列同士の掛け算は要素積となる ( 内積でない )
行列の入った変数を arr とすると…
for ループをいちいち回すようなコードを書かずに済む !
9
なぜ numpy が必要 ?
numpy で一番重要な機能 : ブロードキャスト
– 大きさの異なる行列同士を ,
自動で拡張して計算してくれる機能
1 2
3 4
5 6
7 8
+
7 8
7 8
7 8
1 2
3 4
5 6
+
(3,2) (1,2) (3,2) (3,2)
ブロードキャストの具体的なルールは
https://deepage.net/features/numpy-broadcasting.html
がとても分かりやすい ( 丸投げ )
10
なぜ numpy が必要 ?
かゆいところに手が届く関数たち
– min や sum とか三角関数とかは当然ある
– 行列の値を決められた範囲内に収めたい !
→ numpy.clip() を使う [ せいかい ]
– ある区間を等分した行列がほしい !
→ numpy.linspace() を使う [ せいかい ]
>>> np.clip([-1.5, -1.0, -0.5, 0, 0.5, 1], -1, 1)
array([-1. , -1. , -0.5, 0. , 0.5, 1. ])
>>> np.linspace(-1, 1, 5)
array([-1. , -0.5, 0. , 0.5, 1. ])
やりたいことを上品に実現できる関数がだいたい揃っている !
11
まとめ
インタプリタ言語でありながら ,
静的型付け言語に匹敵する計算速度
シンプルな記述方法ながら ,
多様な演算を上品に可能とする充実したホスピタリティ
まさに両者のいいとこ取り
数値計算には numpy を使おう !

Weitere ähnliche Inhalte

Was ist angesagt? (10)

Hadoop Conference Japan 2009 #2
Hadoop Conference Japan 2009 #2Hadoop Conference Japan 2009 #2
Hadoop Conference Japan 2009 #2
 
200319 eash python_shareslide
200319 eash python_shareslide200319 eash python_shareslide
200319 eash python_shareslide
 
2013_kougi6
2013_kougi62013_kougi6
2013_kougi6
 
Lispのべんきょう
LispのべんきょうLispのべんきょう
Lispのべんきょう
 
20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT7720130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77
 
FOSS4G 2012 Osaka
FOSS4G 2012 OsakaFOSS4G 2012 Osaka
FOSS4G 2012 Osaka
 
R+pythonでKAGGLEの2値予測に挑戦!
R+pythonでKAGGLEの2値予測に挑戦! R+pythonでKAGGLEの2値予測に挑戦!
R+pythonでKAGGLEの2値予測に挑戦!
 
FM-indexによる全文検索
FM-indexによる全文検索FM-indexによる全文検索
FM-indexによる全文検索
 
輪講_Sakiyama_20170601
輪講_Sakiyama_20170601輪講_Sakiyama_20170601
輪講_Sakiyama_20170601
 
第2回関西ゼロから始めるR言語勉強会
第2回関西ゼロから始めるR言語勉強会第2回関西ゼロから始めるR言語勉強会
第2回関西ゼロから始めるR言語勉強会
 

Ähnlich wie numpyの魅力

財布にやさしいRを使ったデータマイニング
財布にやさしいRを使ったデータマイニング財布にやさしいRを使ったデータマイニング
財布にやさしいRを使ったデータマイニング
Ryoji Yanashima
 
次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発
shoma h
 

Ähnlich wie numpyの魅力 (20)

High performance python computing for data science
High performance python computing for data scienceHigh performance python computing for data science
High performance python computing for data science
 
Hannari python#27
Hannari python#27Hannari python#27
Hannari python#27
 
Introduction Pycon2010
Introduction Pycon2010Introduction Pycon2010
Introduction Pycon2010
 
ゼロから学ぶPython勉強会
ゼロから学ぶPython勉強会ゼロから学ぶPython勉強会
ゼロから学ぶPython勉強会
 
Stapy#22 LT
Stapy#22 LTStapy#22 LT
Stapy#22 LT
 
Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Report
 
PyPy 紹介
PyPy 紹介PyPy 紹介
PyPy 紹介
 
Sinatra風マイクロフレームワークで始めるPython
Sinatra風マイクロフレームワークで始めるPythonSinatra風マイクロフレームワークで始めるPython
Sinatra風マイクロフレームワークで始めるPython
 
Python for Beginners ( #PyLadiesKyoto Meetup )
Python for Beginners ( #PyLadiesKyoto Meetup )Python for Beginners ( #PyLadiesKyoto Meetup )
Python for Beginners ( #PyLadiesKyoto Meetup )
 
Django_Fukuoka
Django_FukuokaDjango_Fukuoka
Django_Fukuoka
 
Django_fukuoka
Django_fukuokaDjango_fukuoka
Django_fukuoka
 
財布にやさしいRを使ったデータマイニング
財布にやさしいRを使ったデータマイニング財布にやさしいRを使ったデータマイニング
財布にやさしいRを使ったデータマイニング
 
私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46
 
バッテリー強奪! PythonをCommon Lispから使う
バッテリー強奪! PythonをCommon Lispから使うバッテリー強奪! PythonをCommon Lispから使う
バッテリー強奪! PythonをCommon Lispから使う
 
次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発
 
Why python
Why pythonWhy python
Why python
 
Why python
Why pythonWhy python
Why python
 
Orientation
OrientationOrientation
Orientation
 
scikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアルscikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアル
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
 

numpyの魅力

  • 1. numpy の魅力 工学部情報科学科 4 年 勝亦利宗 2018 年 八峰祭 Linux 研究会 LT 大会スライド
  • 2. 2 numpy とは何か numpy は ,Python で数値計算を高速に行うライブラリ
  • 3. 3 numpy とは何か numpy は ,Python で数値計算を高速に行うライブラリ numpy は ,Python で大量の数値計算を高速に行うライブラリ
  • 4. 4 “ 大量の”とは ? numpy は ,Python で数値計算を高速に行うライブラリ numpy は ,Python で大量の数値計算を高速に行うライブラリ 何が違うの ? →Python の事情を知る必要がある
  • 5. 5 なぜ numpy が必要 ? Python は for ループが無茶苦茶遅い ! なぜ遅いのかは検索してください どれほど遅いのか , 以下の問題を計算させてみて確かめてみる のとき , m2 を求めよ . ( 内積の計算 ) 問題 :
  • 6. 6 なぜ numpy が必要 ? 計算した結果 C++ 15s Python 6m57s Python では C++ の 23.8 倍の 計算時間がかかっている ! (time コマンドの real 値を参照しています ) 仕事効率化しなきゃ 計測に使ったプログラムはここ https://github.com/106-/numpy_test
  • 7. 7 なぜ numpy が必要 ? 計算した結果 C++ 15s Python 6m57s Python+numpy 2.5s なんと C++ よりも早い結果 下手にガバガバなコードを書くよりも , numpy を使ったほうが早く動作しうる しかも Python なのでコーディングも容易 → 実際に記述の方法を見てみよう
  • 8. 8 なぜ numpy が必要 ? 行列の計算をとても簡単に記述できる ! – 行列の要素全てに 5 を掛けたい ! → arr * 5 – 行列の要素全部の対数を取りたい ! → np.log(arr) – 行列の要素同士を掛け算したい !( アダマール積 ) → arr1*arr2 – numpy では , 行列同士の掛け算は要素積となる ( 内積でない ) 行列の入った変数を arr とすると… for ループをいちいち回すようなコードを書かずに済む !
  • 9. 9 なぜ numpy が必要 ? numpy で一番重要な機能 : ブロードキャスト – 大きさの異なる行列同士を , 自動で拡張して計算してくれる機能 1 2 3 4 5 6 7 8 + 7 8 7 8 7 8 1 2 3 4 5 6 + (3,2) (1,2) (3,2) (3,2) ブロードキャストの具体的なルールは https://deepage.net/features/numpy-broadcasting.html がとても分かりやすい ( 丸投げ )
  • 10. 10 なぜ numpy が必要 ? かゆいところに手が届く関数たち – min や sum とか三角関数とかは当然ある – 行列の値を決められた範囲内に収めたい ! → numpy.clip() を使う [ せいかい ] – ある区間を等分した行列がほしい ! → numpy.linspace() を使う [ せいかい ] >>> np.clip([-1.5, -1.0, -0.5, 0, 0.5, 1], -1, 1) array([-1. , -1. , -0.5, 0. , 0.5, 1. ]) >>> np.linspace(-1, 1, 5) array([-1. , -0.5, 0. , 0.5, 1. ]) やりたいことを上品に実現できる関数がだいたい揃っている !