如何在返回向量函数上使用Numpy向量化?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (59)

numpy.vectorize接受函数f:a->b,并将其转化为g:a[]->b[]。

ab是标量,但我想不出为什么它不能将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)

有方法吗?

提问于
用户回答回答于
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)
b = g(a)
b = np.array(b.tolist())
print(b)#b.shape = (4,5)
c = np.ones((2,3,4))
d = g(c)
d = np.array(d.tolist())
print(d)#d.shape = (2,3,4,5)

用户回答回答于

np.vectorize只是一个方便的函数。如果使用起来不方便e,只需编写自己的函数即可。

扫码关注云+社区