numpy.vectorize返回不正确的值

时间:2014-10-11 15:43:34

标签: python numpy vectorization

我在numpy.vectorize功能方面遇到了一些问题。

我已经定义了一个适用于单个元素输入的函数,但是矢量化版本返回了不同的结果 - 我做错了什么?

代码:

def c_inf_comp(z):
    if z>0:
        return np.exp(-1./(z*z))
    else:
        return 0


>>> x = np.array([-10., 10.])
>>> x
array([-10.,  10.])
>>> c_inf_comp(x[0])
0
>>> c_inf_comp(x[1])
0.99004983374916811
>>> vfunz = np.vectorize(c_inf_comp)
>>> vfunz(x)
array([0, 0])

1 个答案:

答案 0 :(得分:17)

因为在向量化函数时没有指定otypes(输出数据类型),NumPy假定您要返回int32值的数组。

当给定x时,向量化函数vfunz首先看到-10.,返回整数0,因此决定返回数组的dtype应该是int32

要解决此问题,请将otypes指定为np.float值:

vfunz = np.vectorize(c_inf_comp, otypes=[np.float])

然后,您可以获得预期的结果:

>>> vfunz(x)
array([ 0.        ,  0.99004983])

(或者,可以通过在else c_inf_comp条件下返回一个浮点值来解决问题,即return 0.0。这样,np.vectorize(c_inf_comp)生成的函数即使它首先看到负数,也会返回一个浮点值数组。)