Ich habe ein NumPy-Array 'boolarr' vom booleschen Typ. Ich möchte die Anzahl der Elemente zählen, deren Werte sind True
. Gibt es eine NumPy- oder Python-Routine für diese Aufgabe? Oder muss ich die Elemente in meinem Skript durchlaufen?
179
Antworten:
Sie haben mehrere Möglichkeiten. Zwei Optionen sind die folgenden.
Hier ist ein Beispiel:
Das ist natürlich eine
bool
spezifische Antwort. Allgemeiner können Sie verwendennumpy.count_nonzero
.quelle
bool
: Boolesche Werte werden in arithmetischen Operationen als 1 und 0 behandelt. Siehe " Boolesche Werte " in der Dokumentation zur Python-Standardbibliothek. Beachten Sie, dass NumPy'sbool
und Pythonbool
nicht identisch sind, aber kompatibel (siehe hier für weitere Informationen).numpy.count_nonzero
nicht in NumPy v1.5.1: Sie haben Recht. Laut dieser Release-Ankündigung wurde es in NumPy v1.6.0 hinzugefügt.numpy.count_nonzero
ist zumindest in meinem Python-Interpreter ungefähr tausendmal schneller.python -m timeit -s "import numpy as np; bools = np.random.uniform(size=1000) >= 0.5" "np.count_nonzero(bools)"
vs.python -m timeit -s "import numpy as np; bools = np.random.uniform(size=1000) >= 0.5" "sum(bools)"
np.sum(bools)
stattdessen mit vergleichen ! Istnp.count_nonzero(bools)
aber immer noch ~ 12x schneller.Diese Frage löste eine ganz ähnliche Frage für mich und ich dachte, ich sollte teilen:
In roher Python können Sie verwenden ,
sum()
zählenTrue
Werte in alist
:Aber das wird nicht funktionieren:
quelle
In Bezug auf den Vergleich von zwei Numpy-Arrays und das Zählen der Anzahl von Übereinstimmungen (z. B. korrekte Klassenvorhersage beim maschinellen Lernen) fand ich das folgende Beispiel für zwei Dimensionen nützlich:
die auf D-Dimensionen erweitert werden kann.
Die Ergebnisse sind:
Prognose:
Ziel:
Anzahl der korrekten Vorhersagen für D = 1:
1
Anzahl der korrekten Vorhersagen für D = 2:
2
quelle
Wenn Sie eine Zählung pro Zeile durchführen möchten, geben Sie Folgendes
axis=1
ansum
:Ebenso mit
np.count_nonzero
:quelle