2013-06-12 94 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)