83

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

4 回答 4

160
a = a[~np.isnan(a)]
于 2010-05-14T02:41:47.280 回答
54

您目前正在测试任何不是 NaN 的东西,并且 mtrw 有正确的方法来做到这一点。如果您有兴趣测试有限数(不是 NaN 也不是 INF),那么您不需要求逆并且可以使用:

np.isfinite(a)

更多 Pythonic 和原生,易于阅读,并且根据我的经验,通常当你想避免 NaN 时,你也想避免 INF。

只是想我会把它扔给人们。

于 2013-11-18T16:57:15.553 回答
3

我不确定这或多或少是pythonic ...

a = [i for i in a if i is not np.nan]
于 2019-11-09T16:49:25.650 回答
2

array([ 1., 2.])从数组中获取arr = np.array([np.nan, 1, 2]) 您可以执行以下操作:

 arr[~np.isnan(arr)]

或者

arr[arr == arr] 

(虽然:np.nan == np.nanFalse

于 2020-10-24T08:33:29.137 回答