Ich verwende Scilab und möchte ein Array von Booleschen Werten in ein Array von Ganzzahlen konvertieren:
>>> x = np.array([4, 3, 2, 1])
>>> y = 2 >= x
>>> y
array([False, False, True, True], dtype=bool)
In Scilab kann ich verwenden:
>>> bool2s(y)
0. 0. 1. 1.
oder multiplizieren Sie es einfach mit 1:
>>> 1*y
0. 0. 1. 1.
Gibt es dafür in Python einen einfachen Befehl oder müsste ich eine Schleife verwenden?
Antworten:
Numpy Arrays haben eine
astype
Methode. Tu es einfachy.astype(int)
.Beachten Sie, dass dies möglicherweise nicht einmal erforderlich ist, je nachdem, wofür Sie das Array verwenden. Bool wird in vielen Fällen automatisch in int verschoben, sodass Sie es zu int-Arrays hinzufügen können, ohne es explizit konvertieren zu müssen:
quelle
Die
1*y
Methode funktioniert auch in Numpy:Wenn Sie nach einer Möglichkeit fragen, Python-Listen von Boolean in int zu konvertieren, können Sie Folgendes
map
tun:Oder Listenverständnisse verwenden:
quelle
y = 1 if x else 0
ist das gleiche wiey = 1 if x>0 else 0
und das gleiche wieif x: y = 1 ""NEXT LINE"" else: y = 0
... wie hast du diese Tricks gelernt, ich habe es nicht in der Dokumentation der if-Anweisung gesehen ?y=1 if x else 0
ist nicht dasselbe wiey=1 if x>0 else 0
, da letztere die negativen Zahlen nicht berücksichtigt. Dies ist genau das, was Python alsTrue
oder definiertFalse
. Diese sind alle in der Dokumentation enthalten.Mit numpy können Sie Folgendes tun:
Wenn Sie ein Array ohne Numpy verwenden, können Sie ein Listenverständnis verwenden :
quelle
Meistens benötigen Sie keine Konvertierung:
Der richtige Weg ist:
oder
quelle
Ich weiß, dass Sie nach Lösungen ohne Schleifen gefragt haben, aber die einzigen Lösungen, die ich finden kann, sind wahrscheinlich sowieso interne Schleifen:
oder:
oder:
quelle
Ein lustiger Weg, dies zu tun, ist
quelle