Python 选择行,使特定列包含列表中的值

Python 选择行,使特定列包含列表中的值,python,arrays,numpy,Python,Arrays,Numpy,我想从numpy数组中获取在一列中具有特定值的行。下面的示例显示了我的方法。当我给出特定的值时,我能够得到行,但当我给出多个值作为('4','8')时,我没有收到预期的行 import numpy as np arr = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]]) arr2 = arr[arr[:,3] == 4] arr3 = arr[arr[:,3] in ('4', '8')] arr是数组([[1,2,3,4],[5,6,7,8],[

我想从numpy数组中获取在一列中具有特定值的行。下面的示例显示了我的方法。当我给出特定的值时,我能够得到行,但当我给出多个值作为
('4','8')
时,我没有收到预期的行

import numpy as np

arr = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
arr2 = arr[arr[:,3] == 4]
arr3 = arr[arr[:,3] in ('4', '8')]
arr是
数组([[1,2,3,4],[5,6,7,8],[9,10,11,12]])

arr2是
数组([[1,2,3,4]])

arr3是
数组([1,2,3,4])

我应该使用什么命令来获取输出
数组([[1,2,3,4],[5,6,7,8]])

用于创建我们正在搜索的元素的任何出现的掩码,然后仅用于从输入数组中选择有效行-

arr[np.in1d(arr[:,3], [4,8])]
样本运行-

In [149]: arr
Out[149]: 
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])

In [150]: np.in1d(arr[:,3], [4,8]) # Mask of valid ones
Out[150]: array([ True,  True, False], dtype=bool)

In [151]: arr[np.in1d(arr[:,3], [4,8])] # Select rows off arr
Out[151]: 
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

虽然没有理由偏离
numpy
-这句话,但我认为我应该提供另一种使用列表理解的方法:

idxs = [True if any(value in (4, 8) for value in row) else False for row in arr]

# convert it to a numpy array
idxs = np.array(idxs)

new_arr = arr[idxs]
请参见结果:

print(new_arr)
[[1 2 3 4]
 [5 6 7 8]]
非常感谢:)我将在启用后立即接受此答案(~10分钟)