如何根据 numpy 数组中的条件删除行?
How to delete a row based on a condition from a numpy array?
来自以下数组:
test = np.array([[1,2,'a'],[4,5,6],[7,'a',9],[10,11,12]])
如何删除包含 'a' 的行?
预期结果:
array([[ 4, 5, 6],
[10, 11, 12]])
注意,numpy
支持向量化比较:
>>> test
array([[1, 2, 'a'],
[4, 5, 6],
[7, 'a', 9],
[10, 11, 12]], dtype=object)
>>> test == 'a'
array([[False, False, True],
[False, False, False],
[False, True, False],
[False, False, False]], dtype=bool)
现在,您需要行,其中所有不等于'a'
:
>>> (test != 'a').all(axis=1)
array([False, True, False, True], dtype=bool)
因此,只需 select 带有掩码的行:
>>> row_mask = (test != 'a').all(axis=1)
>>> test[row_mask,:]
array([[4, 5, 6],
[10, 11, 12]], dtype=object)
另外,也许像这样? (灵感来自我的一个 )
In [100]: mask = ~(test == 'a')
In [101]: mask
Out[101]:
array([[ True, True, False],
[ True, True, True],
[ True, False, True],
[ True, True, True]], dtype=bool)
In [102]: test[np.all(mask, axis=1), :]
Out[102]:
array([['4', '5', '6'],
['10', '11', '12']],
dtype='<U21')
但是,请注意,这里我们不是删除原始数组中的任何行。我们只是切出没有字母 a
.
的行
综上所述,有几种可能的方法,例如:
test[np.all(test != 'a', axis=1), :]
或
test[(test != 'a').all(axis=1)]
来自以下数组:
test = np.array([[1,2,'a'],[4,5,6],[7,'a',9],[10,11,12]])
如何删除包含 'a' 的行? 预期结果:
array([[ 4, 5, 6],
[10, 11, 12]])
注意,numpy
支持向量化比较:
>>> test
array([[1, 2, 'a'],
[4, 5, 6],
[7, 'a', 9],
[10, 11, 12]], dtype=object)
>>> test == 'a'
array([[False, False, True],
[False, False, False],
[False, True, False],
[False, False, False]], dtype=bool)
现在,您需要行,其中所有不等于'a'
:
>>> (test != 'a').all(axis=1)
array([False, True, False, True], dtype=bool)
因此,只需 select 带有掩码的行:
>>> row_mask = (test != 'a').all(axis=1)
>>> test[row_mask,:]
array([[4, 5, 6],
[10, 11, 12]], dtype=object)
另外,也许像这样? (灵感来自我的一个
In [100]: mask = ~(test == 'a')
In [101]: mask
Out[101]:
array([[ True, True, False],
[ True, True, True],
[ True, False, True],
[ True, True, True]], dtype=bool)
In [102]: test[np.all(mask, axis=1), :]
Out[102]:
array([['4', '5', '6'],
['10', '11', '12']],
dtype='<U21')
但是,请注意,这里我们不是删除原始数组中的任何行。我们只是切出没有字母 a
.
综上所述,有几种可能的方法,例如:
test[np.all(test != 'a', axis=1), :]
或
test[(test != 'a').all(axis=1)]