Yo uso Scilab, y quiero convertir una matriz de booleanos en una matriz de enteros:
>>> x = np.array([4, 3, 2, 1])
>>> y = 2 >= x
>>> y
array([False, False, True, True], dtype=bool)
En Scilab puedo usar:
>>> bool2s(y)
0. 0. 1. 1.
o incluso simplemente multiplíquelo por 1:
>>> 1*y
0. 0. 1. 1.
¿Hay un comando simple para esto en Python, o tendría que usar un bucle?
Respuestas:
Las matrices Numpy tienen un
astype
método. Solo hazloy.astype(int)
.Tenga en cuenta que puede que ni siquiera sea necesario hacer esto, dependiendo de para qué esté usando la matriz. Bool se promocionará automáticamente a int en muchos casos, por lo que puede agregarlo a matrices int sin tener que convertirlo explícitamente:
fuente
El
1*y
método también funciona en Numpy:Si está pidiendo una forma de convertir listas de Python de booleano a int, puede usarlo
map
para hacerlo:O usando listas de comprensión:
fuente
y = 1 if x else 0
es lo mismoy = 1 if x>0 else 0
y lo mismo queif x: y = 1 ""NEXT LINE"" else: y = 0
... ¿cómo aprendiste esos trucos, no lo vi en la documentación de la declaración if ?y=1 if x else 0
no es lo mismoy=1 if x>0 else 0
, ya que este último no tiene en cuenta los números negativos. Esto es exactamente lo que Python define comoTrue
oFalse
, todos están en la documentación.Usando numpy, puedes hacer:
Si estaba usando una matriz no numpy, podría usar una lista de comprensión :
fuente
La mayoría de las veces no necesita conversión:
La forma correcta de hacerlo es:
o
fuente
Sé que solicitó soluciones sin bucle, pero las únicas soluciones que puedo encontrar probablemente se repitan internamente de todos modos:
o:
o:
fuente
Una forma divertida de hacer esto es
fuente