Eu uso o Scilab e quero converter uma matriz de booleanos em uma matriz de números inteiros:
>>> x = np.array([4, 3, 2, 1])
>>> y = 2 >= x
>>> y
array([False, False, True, True], dtype=bool)
No Scilab eu posso usar:
>>> bool2s(y)
0. 0. 1. 1.
ou mesmo multiplicá-lo por 1:
>>> 1*y
0. 0. 1. 1.
Existe um comando simples para isso em Python, ou eu teria que usar um loop?
Respostas:
Matrizes numpy têm um
astype
método Apenas façay.astype(int)
.Observe que pode nem ser necessário fazer isso, dependendo do uso da matriz. O bool será promovido automaticamente para int em muitos casos, portanto, você pode adicioná-lo às matrizes int sem precisar convertê-lo explicitamente:
fonte
O
1*y
método também funciona no Numpy:Se você está procurando uma maneira de converter listas Python de booleano em int, pode usar
map
:Ou usando a compreensão da lista:
fonte
y = 1 if x else 0
é o mesmoy = 1 if x>0 else 0
e o mesmo queif x: y = 1 ""NEXT LINE"" else: y = 0
.... como você aprendeu esses truques, eu não vi isso na documentação da instrução if ?y=1 if x else 0
é o mesmo quey=1 if x>0 else 0
, uma vez que este último não leva em consideração os números negativos. Isso é exatamente o que Python define comoTrue
ouFalse
, tudo isso está na documentação.Usando numpy, você pode fazer:
Se você estivesse usando uma matriz não numpy, poderia usar uma compreensão de lista :
fonte
Na maioria das vezes você não precisa de conversão:
A maneira correta de fazer isso é:
ou
fonte
Sei que você pediu soluções sem loop, mas as únicas soluções que posso encontrar provavelmente fazem loop internamente de qualquer maneira:
ou:
ou:
fonte
Uma maneira engraçada de fazer isso é
fonte