Ich habe ein NxM-Array in numpy, für das ich das Protokoll aufnehmen möchte, und ignoriere Einträge, die vor der Protokollierung negativ waren. Wenn ich das Protokoll von negativen Einträgen nehme, gibt es -Inf zurück, also werde ich eine Matrix mit einigen -Inf-Werten als Ergebnis haben. Ich möchte dann die Spalten dieser Matrix summieren, aber die -Inf-Werte ignorieren - wie kann ich das tun?Ignorieren von -Inf-Werten in Arrays mit numpy/scipy in Python
Zum Beispiel
mylogarray = log(myarray)
# take sum, but ignore -Inf?
sum(mylogarray, 0)
Ich weiß, dass es nansum und ich brauche das Äquivalent, so etwas wie infsum.
Danke.
Kannst du das bitte weiter ausführen? Ich verstehe das Beispiel nicht. Wie haben Sie das maskierte Array oben initialisiert? – user248237dfsf
@ user248237 - Die Funktionen 'numpy.ma.log' usw. erzeugen automatisch ein maskiertes Array, in dem alles, was zu einem 'inf' oder 'nan' führt, maskiert wird. Dies ist jedoch etwas weniger explizit, so dass Sie stattdessen Folgendes tun können: 'a = np.ma.masked_where (a == np.inf, a)', und dann einfach 'b = np.log (a) ' (oder irgendeine andere Funktion). Alternativ können Sie maskierte Arrays vermeiden und einfach 'np.log (a [a! = Np.inf]). Sum()' (Sie können mit booleschen Arrays indizieren, es ist viel sauberer und schneller als das 'filter'-basierte Antworten.) –
@ user248237 Ich habe das maskierte Array nicht explizit initialisiert. 'a' ist nur ein normales, nicht maskiertes Array. 'ma.log' maskiert alle Werte, bei denen der (reale) Logarithmus nicht definiert ist. Dann wird das resultierende maskierte Array "b" grob behandelt, als ob die maskierten Einträge nicht vorhanden wären. – Philipp