numpy中的“isnotnan”功能,这可以更加pythonic吗?

时间:2010-05-14 02:30:59

标签: arrays numpy python nan

我需要一个从数组中返回非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

如果你知道更好的方法请分享, 谢谢

4 个答案:

答案 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