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
astypemé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*ymétodo también funciona en Numpy:Si está pidiendo una forma de convertir listas de Python de booleano a int, puede usarlo
mappara hacerlo:O usando listas de comprensión:
fuente
y = 1 if x else 0es lo mismoy = 1 if x>0 else 0y 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 0no 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 comoTrueoFalse, 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