2013-03-07 119 views
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])的作品,但它似乎很讨厌。什么是正确的方法来做到这一点?

回答

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

+0

啊,我试图分解成'[3 2013-03-08 00:04:38