从具有多个逻辑条件的列中选择numpy数组

时间:2015-05-10 02:19:17

标签: python arrays numpy

我可以使用myarray[myarray[:,1]==7]从numpy数组中选择第二个元素为7的行。如何扩展它以选择第二个元素为7或9的行?例如。像myarray[myarray[:,1]==7|==9]这样的东西(显然不起作用)。

2 个答案:

答案 0 :(得分:2)

例如使用a[(a[:,1] == 7) | (a[:,1] == 9)]

In [6]: a = np.array([[4,7,8], [6,9,0], [4,4,4]])

In [7]: a[(a[:,1] == 7) | (a[:,1] == 9)]
Out[7]: 
array([[4, 7, 8],
       [6, 9, 0]])

另一种选择是使用numpy.logical_or

In [15]: a[np.logical_or(a[:, 1] == 7, a[:,1] == 9)]
Out[15]: 
array([[4, 7, 8],
       [6, 9, 0]])

答案 1 :(得分:0)

如果您想要优雅地包含更多元素以供选择,可以使用np.in1d,如下一段代码和示例运行所示。

代码 -

select_elements_list = [7,9] # Edit this to include more numbers if needed
row_mask = np.in1d(myarray[:,1],select_elements_list) # mask of valid rows
myarray_out = myarray[row_mask,:] # Output with selected rows based on mask

因此,基本上就是这样的单线 -

myarray_out = myarray[np.in1d(myarray[:,1],[7,9]),:]

示例运行 -

In [15]: myarray
Out[15]: 
array([[8, 7, 7, 8, 8],
       [8, 9, 8, 9, 9],
       [9, 9, 7, 8, 7],
       [7, 8, 8, 7, 8]])

In [16]: myarray[:,1]
Out[16]: array([7, 9, 9, 8])

In [17]: row_mask = np.in1d(myarray[:,1],[7, 9])

In [18]: row_mask
Out[18]: array([ True,  True,  True, False], dtype=bool)

In [19]: myarray[row_mask,:]
Out[19]: 
array([[8, 7, 7, 8, 8],
       [8, 9, 8, 9, 9],
       [9, 9, 7, 8, 7]])