J'utilise Scilab et je souhaite 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 multipliez-le par 1:
>>> 1*y
0. 0. 1. 1.
Existe-t-il une commande simple pour cela en Python, ou devrais-je utiliser une boucle?
Réponses:
Les tableaux Numpy ont une
astype
méthode. Fais justey.astype(int)
.Notez qu'il peut même ne pas être nécessaire de le faire, en fonction de l'utilisation que vous faites de la baie. Bool sera autopromoté en int dans de nombreux cas, vous pouvez donc l'ajouter aux tableaux int sans avoir à le convertir explicitement:
la source
La
1*y
méthode fonctionne également dans Numpy:Si vous demandez un moyen de convertir des listes Python de Boolean en int, vous pouvez utiliser
map
pour le faire:Ou en utilisant des compréhensions de liste:
la source
y = 1 if x else 0
est le mêmey = 1 if x>0 else 0
et le même queif x: y = 1 ""NEXT LINE"" else: y = 0
.... comment avez-vous appris ces astuces, je ne l'ai pas vu dans la documentation de l' instruction if ?y=1 if x else 0
n'est pas le même quey=1 if x>0 else 0
, puisque ce dernier ne prend pas en compte les nombres négatifs. C'est exactement ce que Python définit commeTrue
ouFalse
, tout cela se trouve dans la documentation.En utilisant numpy, vous pouvez faire:
Si vous utilisiez un tableau non numpy, vous pouvez utiliser une compréhension de liste :
la source
La plupart du temps, vous n'avez pas besoin de conversion:
La bonne façon de procéder est:
ou
la source
Je sais que vous avez demandé des solutions sans boucle, mais les seules solutions que je peux proposer sont probablement en interne de toute façon:
ou:
ou:
la source
Une façon amusante de le faire est
la source