numpy.vectorize
関数 f:a->b を受け取り、それを g:a[]->b[] に変換します。
a
とがスカラーの場合、これは問題なく動作しますが、b をor リスト、つまり f:a->b[] と g:a[]->b[] でb
動作しない理由が思いつきません。 ndarray
[]
例えば:
import numpy as np
def f(x):
return x * np.array([1,1,1,1,1], dtype=np.float32)
g = np.vectorize(f, otypes=[np.ndarray])
a = np.arange(4)
print(g(a))
これにより、次の結果が得られます。
array([[ 0. 0. 0. 0. 0.],
[ 1. 1. 1. 1. 1.],
[ 2. 2. 2. 2. 2.],
[ 3. 3. 3. 3. 3.]], dtype=object)
わかりました、それで正しい値が得られますが、dtype が間違っています。さらに悪いことに:
g(a).shape
収量:
(4,)
したがって、この配列はほとんど役に立ちません。私はそれを変換できることを知っています:
np.array(map(list, a), dtype=np.float32)
私が欲しいものを私に与えるために:
array([[ 0., 0., 0., 0., 0.],
[ 1., 1., 1., 1., 1.],
[ 2., 2., 2., 2., 2.],
[ 3., 3., 3., 3., 3.]], dtype=float32)
しかし、それは効率的でもpythonicでもありません。これを行うためのよりクリーンな方法を見つけられる人はいますか?
前もって感謝します!