
52
2
章
NumPy
の基礎
かに速いオーダーで実行が完了していることがわかります。
In[4]: %timeit (1.0 / big_array)
100 loops, best of 3: 4.6 ms per loop
NumPy
のベクトル化演算は、
ufunc
を使用して実装されます。
ufunc
の主な目的は、
NumPy
配列
の各要素に対して繰り返し演算を素早く実行することです。
ufunc
は非常に柔軟性があります。ス
カラーと配列の間の操作は既に見ましたが、配列同士の操作も可能です。
In[5]: np.arange(5) / np.arange(1, 6)
Out[5]: array([ 0. , 0.5 , 0.66666667, 0.75 , 0.8 ])
また、
ufunc
の演算は
1
次元配列だけに限定されず、多次元配列でも動作します。
In[6]: x = np.arange(9).reshape((3, 3))
2 ** x
Out[6]: array([[ 1, 2, 4],
[ 8, 16, 32],
[ 64, 128, 256]])
ufunc
を使ったベクトル化演算は、特に配列のサイズが大きくなるにつれて
Python
ループを使っ
た実装よりもずっと効率的になります。
Python
スクリプトでこのようなループを見つけたらいつ
でも、ベクトル化された式で置き換えられるかどうかを検討すべきです。
2.3.3
NumPy ufunc
の調査
ufuncs
は、単一入力を操作する単項ufuncと
2
つの