Zählen der Anzahl von nicht-NaN-Elemente in ein ndarray numpy Python
Brauche ich zur Berechnung der Anzahl von nicht-NaN-Elemente in ein ndarray numpy matrix. Wie würde man effizient tun Sie dies in Python? Hier ist mein einfacher code für die Erreichung dieses:
import numpy as np
def numberOfNonNans(data):
count = 0
for i in data:
if not np.isnan(i):
count += 1
return count
Gibt es eine eingebaute Funktion für diesen in numpy? Effizienz ist wichtig, weil ich mache Big-Data-Analyse.
Thnx für jede Hilfe!!!
- Diese Frage scheint off-topic, weil es auf codereview.stackexchange.com
- Du meinst, effiziente in Bezug auf Speicher?
- +1 ich dachte an CPU-Zeit, aber ja, warum nicht Speicher. Je schneller und billiger, desto besser =)
- Eine Speicher-effiziente version wil
sum(not np.isnan(x) for x in a)
, aber in Bezug auf Geschwindigkeit, es ist langsam im Vergleich zu @M4rtini numpy-version. - Ich danke Ihnen sehr! Ich muss sehen, was einem wichtiger ist in meiner Bewerbung =)
Du musst angemeldet sein, um einen Kommentar abzugeben.
~
kehrt den booleschen matrix zurückgegeben, die vonnp.isnan
.np.count_nonzero
zählt Werte, die nicht 0\false..sum
sollte das gleiche Ergebnis. Aber vielleicht mehr deutlich zu verwendencount_nonzero
Test-Geschwindigkeit:
data.size - np.count_nonzero(np.isnan(data))
scheint kaum der Schnellste hier. andere Daten geben könnten unterschiedliche relativ-Geschwindigkeit Ergebnisse.~
?numpy.isnan(array).sum()
? Ich bin nicht sehr bewandert mit numpy obwohl.~
invertieren Sie die matrix. Ich denke, es ist implementiert als eine__not__
für ndarrays.data.size - np.isnan(data).sum()
wird etwas effizienter.Schnell schreiben alterantive
Obwohl nicht die Schnellste Wahl, wenn die Leistung nicht ein Problem, können Sie verwenden:
sum(~np.isnan(data))
.Leistung:
Alternative, aber etwas langsamere alternative ist es über die Indizierung.
Die doppelte Verwendung von
np.isnan(data)
und die==
Betreiber vielleicht ein bisschen zuviel des guten und so habe ich geschrieben, die Antwort nur der Vollständigkeit halber.Um festzustellen, ob das array ist spärlich, es kann helfen, zu erhalten ein Anteil von nan-Werte
Wenn das Verhältnis eine Schwelle überschreitet, dann verwenden Sie ein sparse array, z.B.
- https://sparse.pydata.org/en/latest/