我们说我有
>>> 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
?
答案 0 :(得分:0)
def noneg(n):
if n < 0:
return n.__class__(0)
return n
noneg(nv)
这里的问题是变量0与你的输入类型无关,我认为。