1

次のような不等式のペアを使用して、numpy配列をフィルタリングするにはどうすればよいですか。

>>> a = np.arange(10)
>>> a[a <= 6]
array([0, 1, 2, 3, 4, 5, 6])
>>> a[3 < a]
array([4, 5, 6, 7, 8, 9])
>>>
>>> a[3 < a <= 6]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous.
 Use a.any() or a.all()

試してみても同じ反応が返ってきますa.all(3 < a <= 6)

np.array([x for x in a if 3 < x <= 6])動作しますが、厄介なようです。これを行う正しい方法は何ですか?

4

1 に答える 1

6

あなたがする必要があります:

a[(3 < a) & (a <= 6)]

これはPythonの「いぼ」です。Python(3 < a <=6)ではに変換され((3 < a) and (a <= 6))ます。andただし、Pythonではandandor演算子のオーバーロードが許可されていないため、numpy配列は操作で機能しません。そのため、numpyはとを使用&|ます。約1年前にこれを修正することについていくつかの議論がありましたが、それ以来私はそれについてあまり考えていません。

http://mail.python.org/pipermail/python-dev/2012-March/117510.html

于 2013-03-07T23:41:15.377 に答える