【问题标题】:numpy.vectorize returns incorrect valuesnumpy.vectorize 返回不正确的值
【发布时间】:2014-12-06 14:57:09
【问题描述】:

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])

【问题讨论】:

    标签: python numpy vectorization


    【解决方案1】:

    由于您在对函数进行向量化时没有指定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])
    

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

    【讨论】:

    猜你喜欢
    • 2018-11-07
    • 2016-10-09
    • 2021-10-26
    • 2015-10-13
    • 2021-02-01
    • 2017-08-21
    • 2021-10-27
    • 2021-02-10
    • 2012-05-11
    相关资源
    最近更新 更多