2013-02-04 31 views
7

Nel fare booleano confronto array, non v'è alcun vantaggio/convenzione di utilizzare & al posto di * o | al posto di +? Sono sempre equivalenti?e vs * e | vs +

(se queste sono nella documentazione, un collegamento sarebbe probabilmente una risposta accettabile, ma la mia ricerca ingenuo per 'commerciale NumPy' e 'NumPy elementwise confronto booleano' non ha dato nulla di rilevante)

risposta

5

In numpy & e | sono equivalenti a np.bitwise_and e np.bitwise_or. È inoltre possibile utilizzare ^ per np.bitwise_xor. Tutto questo è documentato nella sezione Arithmetic and comparison operations dei documenti di ndarray. Esistono anche ufunc per np.logical_and, np.logical_or e np.logical_xor.

Se i vostri array sono tutti di tipo bool non ci dovrebbero essere differenze. Io personalmente magra verso & e |, anche se se non si è rigorosa circa la bool DTYPE si può ottenere in difficoltà come questo:

In [30]: np.array(2) & np.array(1) 
Out[30]: 0 
5

Nel caso in cui qualcuno si chiedevano: le operazioni hanno la stessa velocità e lo fa quindi non importa quale scegli.

In [1]: import numpy as np 

In [2]: a = np.random.randn(1000)>0 

In [3]: b = np.random.randn(1000)>0 

In [4]: %timeit a*b 
100000 loops, best of 3: 2.89 us per loop 

In [5]: %timeit a&b 
100000 loops, best of 3: 2.87 us per loop 

In [6]: %timeit a+b 
100000 loops, best of 3: 2.69 us per loop 

In [7]: %timeit a|b 
100000 loops, best of 3: 2.62 us per loop 

Per quanto mi riguarda, io uso & e | per rendere esplicito che io sono interessato a un'operazione booleana (nel caso in cui il lettore ha dimenticato la DTYPE delle matrici in questione).

Problemi correlati