numpy.vectorize
接受一个函数 f:a->b 并将其转换为 g:a[]->b[]。
a
当和是标量时这很好b
用,但我想不出为什么它不能与 b 作为一个ndarray
或列表一起使用,即 f:a->b[] 和 g:a[]->b[] []
例如:
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。你们中的任何人都可以找到更清洁的方法吗?
提前致谢!