170 votes

Comment convertir un tableau de booléens en tableau d'int.

J'utilise Scilab, et je veux convertir un tableau de booléens en un tableau d'entiers :

>>> x = np.array([4, 3, 2, 1])
>>> y = 2 >= x
>>> y
array([False, False,  True,  True], dtype=bool)

Dans Scilab, je peux utiliser :

>>> bool2s(y)
0.    0.    1.    1.  

ou même simplement le multiplier par 1 :

>>> 1*y
0.    0.    1.    1.  

Existe-t-il une commande simple pour cela en Python, ou dois-je utiliser une boucle ?

213voto

BrenBarn Points 63718

Les tableaux de Numpy ont un astype méthode. Il suffit de faire y.astype(int) .

Notez qu'il n'est peut-être même pas nécessaire de le faire, selon l'usage que vous faites du tableau. Bool sera automatiquement promu en int dans de nombreux cas, vous pouvez donc l'ajouter à des tableaux d'int sans avoir à le convertir explicitement :

>>> x
array([ True, False,  True], dtype=bool)
>>> x + [1, 2, 3]
array([2, 2, 4])

67voto

Sukrit Kalra Points 11349

El 1*y fonctionne également dans 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 vous cherchez un moyen de convertir des listes Python de booléen en int, vous pouvez utiliser map pour le faire :

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

Ou en utilisant des listes compréhensives :

>>> testList
[False, False, True, True]
>>> [int(elem) for elem in testList]
[0, 0, 1, 1]

31voto

cjm Points 1321

En utilisant numpy, vous pouvez le faire :

y = x.astype(int)

Si vous utilisiez un tableau non Numpy, vous pourriez utiliser une balise compréhension de la liste :

y = [int(val) for val in x]

19voto

Gioelelm Points 989

La plupart du temps, vous n'avez pas besoin de conversion :

>>>array([True,True,False,False]) + array([1,2,3,4])
array([2, 3, 3, 4])

La bonne façon de faire est :

yourArray.astype(int)

o

yourArray.astype(float)

8voto

Thomas G. Points 389

Une façon amusante de le faire est

>>> np.array([True, False, False]) + 0 
np.array([1, 0, 0])

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X