我需要一个从数组中返回非NaN值的函数。目前我这样做:
>>> a = np.array([np.nan, 1, 2])
>>> a
array([ NaN, 1., 2.])
>>> np.invert(np.isnan(a))
array([False, True, True], dtype=bool)
>>> a[np.invert(np.isnan(a))]
array([ 1., 2.])
Python:2.6.4 numpy:1.3.0
如果你知道更好的方法请分享, 谢谢
答案 0 :(得分:102)
a = a[~np.isnan(a)]
答案 1 :(得分:34)
您目前正在测试任何非NaN的东西,而mtrw有正确的方法来执行此操作。如果您对测试有限数字感兴趣(不是NaN而不是INF)那么您不需要反演并且可以使用:
np.isfinite(a)
更多pythonic和native,易读,通常当你想避免使用NaN时,你也希望在我的经验中避免使用INF。
我以为我会把那些人扔给那些人。
答案 2 :(得分:0)
我不确定这是多还是少的pythonic ...
a = [i for i in a if i is not np.nan]
答案 3 :(得分:0)
要从数组array([ 1., 2.])
中获取arr = np.array([np.nan, 1, 2])
你可以做:
arr[~np.isnan(arr)]
OR
arr[arr == arr]
(而 np.nan == np.nan 是 False )