2013-06-12 126 views
8

在numpy的numpy的鏈比較,我可以產生一個布爾陣列是這樣的:與兩個謂詞

>>> arr = np.array([1, 2, 1, 2, 3, 6, 9]) 
>>> arr > 2 
array([False, False, False, False, True, True, True], dtype=bool) 

是能夠比較鏈一起?例如:

>>> 6 > arr > 2 
array([False, False, False, False, True, False, False], dtype=bool) 
+0

僅供參考,[PEP 535](https://www.python.org/dev/peps/pep-0535/)建議在python 3.7中使這成爲可能。 – drammock

回答

13

據我所知,你可以得到最接近的是使用&|^

>>> arr = np.array([1, 2, 1, 2, 3, 6, 9]) 
>>> (2 < arr) & (arr < 6) 
array([False, False, False, False, True, False, False], dtype=bool) 
>>> (2 < arr) | (arr < 6) 
array([ True, True, True, True, True, True, True], dtype=bool) 
>>> (2 < arr)^(arr < 6) 
array([ True, True, True, True, False, True, True], dtype=bool) 

我不認爲你將能夠獲得a < b < c式的鏈接,以工作。

7

您可以使用numpy邏輯運算符來做類似的事情。

>>> arr = np.array([1, 2, 1, 2, 3, 6, 9]) 
>>> arr > 2 
array([False, False, False, False, True, True, True], dtype=bool) 
>>>np.logical_and(arr>2,arr<6) 
Out[5]: array([False, False, False, False, True, False, False], dtype=bool)