
510
付録
A
NumPy
:応用編
In [136]: def add_elements(x, y):
.....: return x + y
In [137]: add_them = np.frompyfunc(add_elements, 2, 1)
In [138]: add_them(np.arange(8), np.arange(8))
Out[138]: array([0, 2, 4, 6, 8, 10, 12, 14], dtype=object)
dtype=object
となっているのに気付いたでしょうか。
frompyfunc
を用いて作られた関数は、常に、
NumPy
の数値型ではなく
Python
オブジェクトの配列を戻します。これでは、計算結果を用いてさらに
NumPy
で計算を行う場合などに効率が悪くなるため、不便なことがあります。幸いなことに、(多少機
能性は劣りますが、)返す型を指定できる
numpy.vectorize
という別の関数があります。
In [139]: add_them = np.vectorize(add_elements, otypes=[np.float64])
In [140]: add_them(np.arange(8), np.arange(8))
Out[140]: array([ 0., 2., 4., 6., 8., 10., 12., 14.])
これらの関数を使えば
ufunc
に相当する機能を持つ関数を自前で用意することができます。このと
き注意してお