Es gibt zwei Möglichkeiten, mit NumPy zu mitteln: np.mean
und np.average
(obwohl es möglicherweise andere gibt). Lassen wir hier den Unterschied zwischen den beiden anderen Artikeln und sehen, welcher in Bezug auf die Verarbeitungsgeschwindigkeit besser ist.
Der folgende Code bezieht sich auf diese Site.
CentOS Linux release 7.6.1810 (Core) Python 3.8.5
Berechnen Sie zunächst einfach das eindimensionale Array.
test1.py
import timeit
import numpy as np
def func_average(n):
return np.average(np.arange(n**2))
def func_mean(n):
return np.mean(np.arange(n**2))
n = 1000
loop = 1000
result_average = timeit.timeit(lambda: func_average(n), number=loop)
result_mean = timeit.timeit(lambda: func_mean(n), number=loop)
print('average: ', result_average / loop)
print('mean: ', result_mean / loop)
Ausführungsergebnis
average: 0.0015093836802989244
mean: 0.001964871450792998
Darüber hinaus habe ich viermal gemessen, aber in jedem Fall war "np.average" etwa 20 bis 30% schneller.
Nehmen Sie als nächstes den Durchschnitt des zweidimensionalen Arrays.
test.py
import timeit
import numpy as np
def func_average(n):
return np.average(np.arange(n**2).reshape(n, n))
def func_mean(n):
return np.mean(np.arange(n**2).reshape(n, n))
n = 1000
loop = 1000
result_average = timeit.timeit(lambda: func_average(n), number=loop)
result_mean = timeit.timeit(lambda: func_mean(n), number=loop)
print('average: ', result_average / loop)
print('mean: ', result_mean / loop)
Ausführungsergebnis
average: 0.0016613604403100909
mean: 0.002270303561817855
Selbst in diesem Fall war "np.average" schnell.
Ich habe andere ähnliche Bedingungen ausprobiert, aber das Ergebnis war, dass "np.average" schneller war. Dies bedeutet nicht "np.mean" ... Ich dachte, das sei nicht der Fall, und als ich weiter suchte, fand ich einen solchen Thread. Übersetzt, modifiziert und zitiert unten:
(Weggelassen) Es sind andere Unterschiede zwischen "Durchschnitt" und "Mittelwert" zu berücksichtigen (andere Unterschiede wurden im vorherigen Thread erwähnt). "Durchschnitt" nimmt den Durchschnitt aller Werte im Array ohne Berücksichtigung der Maske, während "Mittelwert" die Maske nimmt, so dass der Durchschnitt nur mit den nicht maskierten Werten genommen wird.
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
In der Tat scheint es, dass "Mittelwert" verwendet werden sollte, wenn es sich um Arrays handelt, die fehlende Werte enthalten.
Es ist am besten, es entsprechend dem Zweck richtig zu verwenden, aber angesichts der Zeit, die für das gesamte Programm benötigt wird, halte ich das Verhältnis von "Durchschnitt" und "Mittelwert" zu unbedeutend, so dass die Option, "Mittelwert" zu verwenden, ohne über irgendetwas nachzudenken Ist es nicht eine Ameise?