2012-05-10 13 views
11

Sto provando a riscrivere un codice MATLAB in python27. V'è una linea MATLAB come segue:numpy.array booleano al binario?

vector_C = vector_A > vector_B; 

Se provo a scrivere in Python usando NumPy sarà lo stesso, ma il risultato sarà un array di booleani anziché binari. Voglio che il risultato sia nei binari. C'è un modo per renderlo di ritorno binario o dovrei convertire manualmente ogni volta? C'è un modo rapido per convertirlo? Sono nuovo di Python. Grazie.

+0

credo Matlab booleano binari e Python sono equivalenti. C'è qualcosa che fai nel codice MATLAB con il vettore binario che non puoi fare con il vettore numerico booleano? –

+0

Non ho ancora provato a fare nulla con il vettore booleano. Ma ho appena diviso il vettore booleano con "1", quindi ora è binario. Immagino che potrei usarlo senza alcuna modifica anche. Grazie –

+0

Se questo funziona, rispondi alla tua domanda per chiuderla. – dtlussier

risposta

14

Anche se vector_C possono avere dtype=bool, si può ancora fare operazioni come le seguenti:

In [1]: vector_A = scipy.randn(4) 

In [2]: vector_B = scipy.zeros(4) 

In [3]: vector_A 
Out[3]: array([ 0.12515902, -0.53244222, -0.67717936, -0.74164708]) 

In [4]: vector_B 
Out[4]: array([ 0., 0., 0., 0.]) 

In [5]: vector_C = vector_A > vector_B 

In [6]: vector_C 
Out[6]: array([ True, False, False, False], dtype=bool) 

In [7]: vector_C.sum() 
Out[7]: 1 

In [8]: vector_C.mean() 
Out[8]: 0.25 

In [9]: 3 - vector_C 
Out[9]: array([2, 3, 3, 3]) 

Così, in breve, probabilmente non c'è bisogno di fare nulla in più.

Ma se si deve fare una conversione, è possibile utilizzare astype:

In [10]: vector_C.astype(int) 
Out[10]: array([1, 0, 0, 0]) 

In [11]: vector_C.astype(float) 
Out[11]: array([ 1., 0., 0., 0.]) 
5

È possibile forzare numpy per memorizzare gli elementi come numeri interi. Tratta 0 come falso e 1 come vero.

import numpy 

vector_C = numpy.array(vector_A > vector_B, dtype=int) ; 
Problemi correlati