如果您只想获取没有 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.]])