In [30]: np.mean([1, 2, 3])
Out[30]: 2.0
In [31]: np.average([1, 2, 3])
Out[31]: 2.0
Allerdings sollte es einige Unterschiede geben, da es sich schließlich um zwei unterschiedliche Funktionen handelt.
Was sind die Unterschiede zwischen ihnen?
Eigentlich macht die Dokumentation es nicht sofort klar, soweit ich sehen kann. Ich sage nicht, dass es unmöglich zu sagen ist, aber ich denke, diese Frage gilt trotzdem für Stack Overflow.
– Schwarzes Gemüse
18. November 2013 um 17:47 Uhr
numpy.mean : Gibt den Durchschnitt der Array-Elemente zurück.
– Joaquín
18. November 2013 um 17:47 Uhr
@joaquin: “Berechnen Sie das arithmetische Mittel entlang der angegebenen Achse.” vs “Berechnen Sie den gewichteten Durchschnitt entlang der angegebenen Achse.”?
– Mixer
19. November 2013 um 0:01 Uhr
@ Blender richtig. Ich habe nur versucht, eine Art lustige Antwort auf Ihren Kommentar zu geben, denn wenn ich Ihren Anweisungen folge, lese ich das erste, was ich in der docs für numpy.mean ist numpy.mean : Gibt den Durchschnitt der Array-Elemente zurück Das ist lustig, wenn Sie nach der Antwort auf die OP-Frage suchen.
– Joaquín
19. November 2013 um 16:05 Uhr
Hammer
np.average akzeptiert einen optionalen Gewichtungsparameter. Wenn es nicht geliefert wird, sind sie gleichwertig. Schauen Sie sich den Quellcode an: Bedeuten, Durchschnitt
...
if weights is None :
avg = a.mean(axis)
scl = avg.dtype.type(a.size/avg.size)
else:
#code that does weighted mean here
if returned: #returned is another optional argument
scl = np.multiply(avg, 0) + scl
return avg, scl
else:
return avg
...
Warum bieten sie zwei verschiedene Funktionen? Anscheinend sollten sie einfach anbieten np.average seit weights ist schon optional. Scheint unnötig und dient nur dazu, Benutzer zu verwirren.
– Geoff
30. November 2015 um 22:03 Uhr
@Geoff Ich möchte lieber, dass sie eine NotImplementedException für “Durchschnitt” auslösen, um die Benutzer darüber aufzuklären, dass das arithmetische Mittel nicht mit “dem Durchschnitt” identisch ist.
– FooBar
26. Juni 2018 um 11:15 Uhr
np.mean berechnet immer ein arithmetisches Mittel und hat einige zusätzliche Eingabe- und Ausgabeoptionen (z. B. welche Datentypen verwendet werden sollen, wo das Ergebnis platziert werden soll).
np.average kann einen gewichteten Durchschnitt berechnen, wenn die weights Parameter geliefert wird.
GM
In einigen Versionen von numpy Es gibt einen weiteren wichtigen Unterschied, den Sie beachten müssen:
average Berücksichtigen Sie keine Masken, berechnen Sie also den Durchschnitt über den gesamten Datensatz.
mean berücksichtigt Masken, berechnet also den Mittelwert nur über unmaskierte Werte.
g = [1,2,3,55,66,77]
f = np.ma.masked_greater(g,5)
np.average(f)
Out: 34.0
np.mean(f)
Out: 2.0
Notiz: np.ma.average funktioniert. Außerdem gibt es eine Fehlerbericht.
– Neil G
29. März 2017 um 1:53 Uhr
np.average und np.mean beides berücksichtigt Masken. Ich habe versucht und den Wert von “Out: 2.0“
– CEB
30. Juni um 14:40 Uhr
@CEB die neue Version behebt wahrscheinlich den Fehler, danke für die Meldung
– GR
30. Juni um 16:42 Uhr
Grant Petty
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: anders np.mean, np.average erlaubt das nicht dtype Schlüsselwort, das in manchen Fällen unerlässlich ist, um korrekte Ergebnisse zu erhalten. Ich habe ein sehr großes Array mit einfacher Genauigkeit, auf das von an zugegriffen wird h5 Datei. Wenn ich den Mittelwert entlang der Achsen 0 und 1 nehme, erhalte ich völlig falsche Ergebnisse, es sei denn, ich gebe etwas an dtype="float64":
Leider können Sie nicht unbedingt sagen, dass Ihre Ergebnisse falsch sind, es sei denn, Sie wissen, wonach Sie suchen müssen. Ich werde nie verwenden np.average wieder aus diesem Grund aber immer verwenden np.mean(.., dtype="float64") auf jedem großen Array. Wenn ich einen gewichteten Durchschnitt möchte, berechne ich ihn explizit mit dem Produkt aus dem Gewichtsvektor und dem Zielarray und dann entweder np.sum oder np.meansoweit angemessen (auch mit angemessener Genauigkeit).
In Ihrem Aufruf sind die beiden Funktionen identisch.
average kann aber einen gewichteten Durchschnitt berechnen.
Eigentlich macht die Dokumentation es nicht sofort klar, soweit ich sehen kann. Ich sage nicht, dass es unmöglich zu sagen ist, aber ich denke, diese Frage gilt trotzdem für Stack Overflow.
– Schwarzes Gemüse
18. November 2013 um 17:47 Uhr
numpy.mean : Gibt den Durchschnitt der Array-Elemente zurück.
– Joaquín
18. November 2013 um 17:47 Uhr
@joaquin: “Berechnen Sie das arithmetische Mittel entlang der angegebenen Achse.” vs “Berechnen Sie den gewichteten Durchschnitt entlang der angegebenen Achse.”?
– Mixer
19. November 2013 um 0:01 Uhr
@ Blender richtig. Ich habe nur versucht, eine Art lustige Antwort auf Ihren Kommentar zu geben, denn wenn ich Ihren Anweisungen folge, lese ich das erste, was ich in der docs für numpy.mean ist numpy.mean : Gibt den Durchschnitt der Array-Elemente zurück Das ist lustig, wenn Sie nach der Antwort auf die OP-Frage suchen.
– Joaquín
19. November 2013 um 16:05 Uhr