2013-03-07 80 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