如何使用链式比较布尔掩码数组?

时间:2013-03-07 23:25:37

标签: python numpy

如何使用一对不等式过滤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])有效,但看起来很讨厌。什么是正确的方法?

1 个答案:

答案 0 :(得分:5)

你需要这样做:

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

这是python中的“疣”。在python中(3 < a <=6)被翻译为((3 < a) and (a <= 6))。但是,numpy数组不适用于and操作,因为python不允许重载andor运算符。因为numpy使用&|。大约一年前有一些关于解决这个问题的讨论,但自那以后我似乎并没有那么多。

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