0
比方說,我有np.vectorize and nan - 我該如何讓他們玩得好?
>>> import numpy as np
>>> nv = np.array([-1, np.nan, 1])
np.sin
將如預期
>>> np.sin(nv)
array([-0.84147098, nan, 0.84147098])
但是,如果我嘗試對我自己的函數矢量化,它會失敗
>>> def noneg(n):
if n < 0:
return 0
return n
>>> noneg(nv)
...
ValueError: cannot convert float NaN to integer
這是因爲noneg返回的initize值是整數零,然後我們得到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.])
但是這個長相醜陋,有沒有更好的辦法忽略的矢量化nan
?
嵌套'np.where'怎麼辦? –
指定「型」。沒有它,返回'dtype'由第一個值的試算確定。 http://stackoverflow.com/a/41795777/901925 – hpaulj