Weitere ähnliche Inhalte
Ähnlich wie numpyの魅力 (20)
numpyの魅力
- 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. ])
やりたいことを上品に実現できる関数がだいたい揃っている !