2013-06-12 10 views
8

In Numpy, io in grado di generare un allineamento booleano come questo:Numpy confronto catena con due predicati

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

È 'possibile il confronto a catena insieme? Per esempio:

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

proposito, [PEP 535] (https://www.python.org/dev/peps/pep-0535/) propone di rendere questo possibile in pitone 3.7. – drammock

risposta

13

quanto ne sappia io il più vicino si può arrivare è quello di utilizzare &, |, e ^:

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

non credo che sarete in grado di ottenere a < b < c concatenamento in stile a lavoro.

7

È possibile utilizzare gli operatori logici numpy per fare qualcosa di simile.

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