numpy.vectorize
接受函数f:a->b并将其转换为g:a[]->b[]。
当a
和b
是标量时,这很好用,但我想不出为什么它不能将b用作ndarray
或list,即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)
好的,这给出了正确的值,但是错误的数据类型。更糟的是:
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式的。你们谁能找到一种更干净的方法来做这件事?
提前感谢!
https://stackoverflow.com/questions/3379301
复制相似问题