2013-06-12 5 views
8

In Numpy, kann ich eine boolean Array wie folgt erzeugen:Numpy Kette Vergleich mit zwei Prädikate

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

ist möglich zusammen zu Kettenvergleiche? Zum Beispiel:

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

FYI, [PEP 535] (https://www.python.org/dev/peps/pep-0535/) schlägt vor, dies in Python 3.7 zu ermöglichen. – drammock

Antwort

13

AFAIK engster Sie erhalten können, ist &, verwenden | und ^:

>>> 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) 

Ich glaube nicht, Sie in der Lage sein werden a < b < c -Stil Verkettungs zu erhalten, Arbeit.

7

Sie können die numpy logischen Operatoren verwenden, um etwas ähnliches zu tun.

>>> 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)