Das merke ich
In [30]: np.mean([1, 2, 3])
Out[30]: 2.0
In [31]: np.average([1, 2, 3])
Out[31]: 2.0
Es sollte jedoch einige Unterschiede geben, da es sich schließlich um zwei verschiedene Funktionen handelt.
Was sind die Unterschiede zwischen ihnen?
Antworten:
np.average verwendet einen optionalen Gewichtungsparameter. Wenn es nicht geliefert wird, sind sie gleichwertig. Schauen Sie sich den Quellcode an: Mittelwert , Durchschnitt
np.mean:
np.average:
quelle
np.average
da diesweights
bereits optional ist. Scheint unnötig und dient nur dazu, Benutzer zu verwirren.np.mean
berechnet immer ein arithmetisches Mittel und verfügt über einige zusätzliche Optionen für die Eingabe und Ausgabe (z. B. welche Datentypen verwendet werden sollen, wo das Ergebnis platziert werden soll).np.average
kann einen gewichteten Durchschnitt berechnen, wenn derweights
Parameter angegeben wird.quelle
In einigen Versionen von Numpy gibt es einen weiteren wichtigen Unterschied, den Sie beachten müssen:
average
Berücksichtigen Sie keine Masken. Berechnen Sie daher den Durchschnitt über den gesamten Datensatz.mean
Berücksichtigt Masken, berechnen Sie den Mittelwert also nur über nicht maskierte Werte.quelle
np.ma.average
funktioniert. Es gibt auch einen Fehlerbericht .In Ihrem Aufruf sind die beiden Funktionen gleich.
average
kann jedoch einen gewichteten Durchschnitt berechnen.Doc Links:
mean
undaverage
quelle
Zusätzlich zu den bereits erwähnten Unterschieden gibt es einen weiteren äußerst wichtigen Unterschied, den ich gerade auf die harte Tour entdeckt habe: Im Gegensatz dazu
np.mean
istnp.average
dasdtype
Schlüsselwort nicht zulässig, was in einigen Fällen für die Erzielung korrekter Ergebnisse unerlässlich ist. Ich habe ein sehr großes Array mit einfacher Genauigkeit, auf das über eineh5
Datei zugegriffen wird. Wenn ich den Mittelwert entlang der Achsen 0 und 1 nehme, erhalte ich völlig falsche Ergebnisse, es sei denn, ich gebe Folgendes andtype='float64'
:Wenn Sie nicht wissen, wonach Sie suchen müssen, können Sie leider nicht unbedingt sagen, dass Ihre Ergebnisse falsch sind. Ich werde
np.average
aus diesem Grund nie wieder verwenden, aber immernp.mean(.., dtype='float64')
auf einem großen Array verwenden. Wenn ich einen gewichteten Durchschnitt möchte, berechne ich ihn explizit unter Verwendung des Produkts aus dem Gewichtsvektor und dem Zielarray und dann entwedernp.sum
odernp.mean
nach Bedarf (auch mit angemessener Genauigkeit).quelle