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