如果你想只拿不具有NaN的行,這是表達您需要:
>>> import numpy as np
>>> a[~np.isnan(a).any(1)]
array([[ 1., 10.],
[ 5., 6.]])
如果你想不具備的元素,例如中的特定數量的行5:
>>> a[~(a == 5).any(1)]
array([[ 1., 10.],
[ NaN, 6.],
[ 6., NaN]])
後者顯然是相當於
>>> a[(a != 5).all(1)]
array([[ 1., 10.],
[ NaN, 6.],
[ 6., NaN]])
說明: 讓我們首先創建例如輸入
>>> import numpy as np
>>> a = np.array([[1, 5, np.nan, 6],
... [10, 6, 6, np.nan]]).transpose()
>>> a
array([[ 1., 10.],
[ 5., 6.],
[ NaN, 6.],
[ 6., NaN]])
這確定哪些元素是NAN
>>> np.isnan(a)
array([[False, False],
[False, False],
[ True, False],
[False, True]], dtype=bool)
個
這標識哪些行有哪些是真正的任何元素
>>> np.isnan(a).any(1)
array([False, False, True, True], dtype=bool)
因爲我們不希望這些,我們否定了最後一個表達式:
>>> ~np.isnan(a).any(1)
array([ True, True, False, False], dtype=bool)
最後,我們使用布爾陣列選擇我們想要的行:
>>> a[~np.isnan(a).any(1)]
array([[ 1., 10.],
[ 5., 6.]])
+1:超清晰且有幫助的解釋,我喜歡〜np.isnan,因爲它可以說明你在做什麼。 – tom10 2010-04-23 18:20:14
多麼可怕的答案 – Tjorriemorrie 2014-11-14 15:25:33