Ich habe ein 2D-Numpy-Array. Einige der Werte in diesem Array sind NaN
. Ich möchte bestimmte Operationen mit diesem Array ausführen. Betrachten Sie zum Beispiel das Array:
[[ 0. 43. 67. 0. 38.]
[ 100. 86. 96. 100. 94.]
[ 76. 79. 83. 89. 56.]
[ 88. NaN 67. 89. 81.]
[ 94. 79. 67. 89. 69.]
[ 88. 79. 58. 72. 63.]
[ 76. 79. 71. 67. 56.]
[ 71. 71. NaN 56. 100.]]
Ich versuche, jede Zeile einzeln zu nehmen, sie in umgekehrter Reihenfolge zu sortieren, um maximal 3 Werte aus der Zeile zu erhalten und ihren Durchschnitt zu ermitteln. Der Code, den ich ausprobiert habe, ist:
# nparr is a 2D numpy array
for entry in nparr:
sortedentry = sorted(entry, reverse=True)
highest_3_values = sortedentry[:3]
avg_highest_3 = float(sum(highest_3_values)) / 3
Dies funktioniert nicht für Zeilen mit NaN
. Meine Frage ist, gibt es eine schnelle Möglichkeit, alle NaN
Werte im 2D-Numpy-Array in Null umzuwandeln, damit ich keine Probleme mit dem Sortieren und anderen Dingen habe, die ich versuche zu tun.
each: map: return isNaN(value) ? 0 : value
Antworten:
Das sollte funktionieren:
Im obigen Fall ist where_are_NaNs:
quelle
Wo
A
ist Ihr 2D-Array:Die Funktion
isnan
erzeugt ein Bool-Array, das angibt, wo sich dieNaN
Werte befinden. Ein boolesches Array kann verwendet werden, um ein Array derselben Form zu indizieren. Stellen Sie es sich wie eine Maske vor.quelle
Wie wäre es mit nan_to_num () ?
quelle
Sie könnten verwenden,
np.where
um herauszufinden, wo Sie habenNaN
:quelle
np.where(np.isnan(a), a, 0)
zunp.where(~np.isnan(a), a, 0)
. Dies kann jedoch ein Unterschied in den verwendeten Versionen sein.b = np.where(np.isnan(a), 0, a)
was einfacher ist~
als mit, wie ich denke.Ein Codebeispiel für Drakes Antwort auf den Einsatz
nan_to_num
:quelle
Sie können numpy.nan_to_num verwenden :
Beispiel (siehe Dokument):
quelle
nan ist niemals gleich nan
also für ein 2D-Array
quelle
entry
ist ein 1D-Array, daher gibt der Testentry != entry
keinen einfachen Booleschen Wert aus, sondern erhöhtValueError
.Sie können die Lambda-Funktion verwenden, ein Beispiel für ein 1D-Array:
Dies gibt Ihnen das Ergebnis:
quelle
Wenn für Ihre Zwecke alle Elemente als gespeichert sind
str
und Sie nur sortiert verwenden, während Sie verwenden, suchen Sie nach dem ersten Element und ersetzen Sie es durch '0'.quelle