python - resta - Cómo convertir una matriz booleana a una matriz int
recorrer matriz python numpy (5)
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 multiplique por 1:
>>> 1*y
0. 0. 1. 1.
¿Hay un comando simple para esto en Python, o tendré que usar un bucle?
El método 1*y
funciona en Numpy:
>>> import numpy as np
>>> x = np.array([4, 3, 2, 1])
>>> y = 2 >= x
>>> y
array([False, False, True, True], dtype=bool)
>>> 1*y # Method 1
array([0, 0, 1, 1])
>>> y.astype(int) # Method 2
array([0, 0, 1, 1])
Si está buscando una forma de convertir listas de Python de Boolean a int, puede usar el map
para hacerlo:
>>> testList = [False, False, True, True]
>>> map(lambda x: 1 if x else 0, testList)
[0, 0, 1, 1]
>>> map(int, testList)
[0, 0, 1, 1]
O usando listas de comprensión:
>>> testList
[False, False, True, True]
>>> [int(elem) for elem in testList]
[0, 0, 1, 1]
La mayoría de las veces no necesita conversión:
>>>array([True,True,False,False]) + array([1,2,3,4])
array([2, 3, 3, 4])
La forma correcta de hacerlo es:
yourArray.astype(int)
o
yourArray.astype(float)
Las matrices Numpy tienen un método de astype
. Simplemente haz y.astype(int)
.
Tenga en cuenta que puede que ni siquiera sea necesario hacerlo, dependiendo de para qué esté utilizando la matriz. Bool se autopromotorizará a int en muchos casos, por lo que puede agregarlo a matrices en int sin tener que convertirlo explícitamente:
>>> x
array([ True, False, True], dtype=bool)
>>> x + [1, 2, 3]
array([2, 2, 4])
Sé que usted solicitó soluciones sin bucles, pero las únicas soluciones con las que puedo pensar probablemente sean internas.
map(int,y)
o:
[i*1 for i in y]
o:
import numpy
y=numpy.array(y)
y*1
Usando Numpy, puedes hacer:
y = x.astype(int)
Si estuviera usando una matriz no numpy, podría usar una lista de comprensión :
y = [int(val) for val in x]