np.vectorize和nan - 我怎样才能让它们玩得很好?

时间:2017-02-15 10:58:25

标签: python numpy

我们说我有

>>> import numpy as np
>>> nv = np.array([-1, np.nan, 1])

np.sin将按预期工作

>>> np.sin(nv)
array([-0.84147098,         nan,  0.84147098])

但是如果我在自己的功能上尝试使用vectorize,那么它就会失败

>>> def noneg(n):
        if n < 0:
             return 0
        return n
>>> noneg(nv)
...
ValueError: cannot convert float NaN to integer

这是因为noneg返回的initize值是整数0,然后我们得到nan这是一个浮点数。

我到目前为止找到的解决方案是:

>>> @np.vectorize
    def noneg(n):
        if not np.isnan(n) and n < 0:
            return n.__class__(0)
        return n
>>> noneg(nv)
array([  0.,  nan,   1.])

然而,这看起来很难看,有没有更好的方法可以忽略vectorize中的nan

1 个答案:

答案 0 :(得分:0)

嗯,你已经写了答案?

def noneg(n):
    if n < 0:
         return n.__class__(0)
    return n
noneg(nv)

这里的问题是变量0与你的输入类型无关,我认为。

相关问题