2012-05-10 47 views
11

Estoy tratando de reescribir un código de matlab en python27. Hay una línea de MATLAB de la siguiente manera:numpy.array booleano a binario?

vector_C = vector_A > vector_B; 

Si trato de escribir esto en Python usando numpy será el mismo, pero el resultado será un array de booleanos en vez de binarios. Quiero que el resultado esté en binarios. ¿Hay alguna manera de hacer que devuelva binario o debo convertir manualmente cada vez? ¿Hay una manera rápida de convertirlo? Soy nuevo en Python. Gracias.

+0

creo MATLAB booleano binarios y Python son equivalentes. ¿Hay algo que hagas en el código de matlab con el vector binario que no puedes hacer con el vector booleano numpy? –

+0

No intenté hacer nada con el vector booleano todavía. Pero, acabo de dividir el vector booleano por "1", por lo que ahora es binario. Creo que podría usarlo sin ninguna modificación también. Gracias –

+0

Si eso funciona para usted, responda su propia pregunta para cerrarla. – dtlussier

Respuesta

14

A pesar de que pueden tener vector_Cdtype=bool, aún puede realizar operaciones tales como las siguientes:

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

Así que, en resumen, es probable que no tiene que hacer nada extra.

Pero si tiene que hacer una conversión, es posible utilizar 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

Puede forzar numpy para almacenar los elementos como enteros. Trata 0 como falso y 1 como verdadero.

import numpy 

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