如何根据numpy数组中的条件删除行?

G F*_*G F 4 python arrays numpy multidimensional-array numpy-ndarray

从以下数组:

test = np.array([[1,2,'a'],[4,5,6],[7,'a',9],[10,11,12]])
Run Code Online (Sandbox Code Playgroud)

如何删除包含"a"的行?预期结果 :

array([[ 4,  5,  6],
   [10, 11, 12]])
Run Code Online (Sandbox Code Playgroud)

jua*_*aga 7

注意,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)
Run Code Online (Sandbox Code Playgroud)

现在,你想要的,其中所有不equalt到'a':

>>> (test != 'a').all(axis=1)
array([False,  True, False,  True], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

因此,只需选择带掩码的行:

>>> row_mask = (test != 'a').all(axis=1)
>>> test[row_mask,:]
array([[4, 5, 6],
       [10, 11, 12]], dtype=object)
Run Code Online (Sandbox Code Playgroud)