4

2 次元の numpy 配列でスライスを実行したいと思います。

type1_c = type1_c[
    (type1_c[:,10]==2) or
    (type1_c[:,10]==3) or
    (type1_c[:,10]==4) or
    (type1_c[:,10]==5) or
    (type1_c[:,10]==6)
]

構文は正しいようです。しかし、次のエラー メッセージが表示されました。a.any() または a.all()' を使用

何が問題なのか本当にわかりません。何か案が?

4

1 に答える 1

7

or2 つのスカラーの間にある場合は明確ですが、正しいベクトルの一般化は何ですか? ifx == array([0, 0])y == array([0,1]), はx or y(1) False である必要があります。なぜなら、or組み合わせたすべてのペアワイズ項が True であるとは限らないからです (2) True です。なぜなら、少なくとも 1 つのペアワイズor結果が true だからです (3) array([0, 1]), なぜなら、それは an のペアワイズ結果だからですor(4) array([0, 0])、空でないリストは真であるため[0,0] or [0,1]に返されるため、 s はそうあるべきか?[0,0]array

|ここで使用して、ビットごとの問題として扱うことができます。

>>> import numpy as np
>>> vec = np.arange(10)
>>> vec[(vec == 2) | (vec == 7)]
array([2, 7])

numpyベクトル化された論理和を明示的に使用します。

>>> np.logical_or(vec==3, vec==5)
array([False, False, False,  True, False,  True, False, False, False, False], dtype=bool)
>>> vec[np.logical_or(vec==3, vec==5)]
array([3, 5])

またはin1d、ここでははるかに効率的な を使用します。

>>> np.in1d(vec, [2, 7])
array([False, False,  True, False, False, False, False,  True, False, False], dtype=bool)
>>> vec[np.in1d(vec, [2, 7])]
array([2, 7])
于 2012-09-02T14:08:52.380 に答える