3

给定以下示例

d = array([[1, 2, 3],
           [1, 2, 3],
           [1, 3, 3],
           [4, 4, 4],
           [5, 5, 5]
          ])

1要获取包含在第一列中的子数组:

d[ d[:,0] == 1 ]

array([[1, 2, 3],
       [1, 2, 3],
       [1, 3, 3]])

如何获取(没有循环)包含1和的子数组5的子数组?不应该是这样的

d[ d[:,0] == [1,5] ]  #   ---> array([1, 2, 3])

哪个不起作用?

4

1 回答 1

7

方法#1:使用按位或|组合条件:

>>> d
array([[1, 2, 3],
       [1, 2, 3],
       [1, 3, 3],
       [4, 4, 4],
       [5, 5, 5]])
>>> (d[:,0] == 1) | (d[:,0] == 5)
array([ True,  True,  True, False,  True], dtype=bool)
>>> d[(d[:,0] == 1) | (d[:,0] == 5)]
array([[1, 2, 3],
       [1, 2, 3],
       [1, 3, 3],
       [5, 5, 5]])

方法#2:使用np.in1d,如果有很多值,这可能更容易:

>>> np.in1d(d[:,0], [1, 5])
array([ True,  True,  True, False,  True], dtype=bool)
>>> d[np.in1d(d[:,0], [1, 5])]
array([[1, 2, 3],
       [1, 2, 3],
       [1, 3, 3],
       [5, 5, 5]])
于 2013-10-10T11:44:32.123 回答