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]])

1andを含むサブ配列を (ループなしで) 取得する方法は5? 次のようなものであってはなりません

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

うまくいかないのはどれですか?

4

1 に答える 1

7

方法 #1: ビット単位の or を使用|して条件を組み合わせます。

>>> 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 に答える