Il existe deux façons de calculer la moyenne avec NumPy: np.mean
et np.average
(bien qu'il puisse y en avoir d'autres). Ici, laissons la différence entre les deux à d'autres articles, et voyons ce qui est le meilleur en termes de vitesse de traitement.
Le code suivant faisait référence à ce site.
CentOS Linux release 7.6.1810 (Core) Python 3.8.5
Tout d'abord, faites simplement la moyenne du tableau unidimensionnel.
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)
Résultat d'exécution
average: 0.0015093836802989244
mean: 0.001964871450792998
En plus de cela, j'ai mesuré 4 fois, mais dans chaque cas, «np.average» était environ 20 à 30% plus rapide.
Ensuite, prenez la moyenne du tableau à deux dimensions.
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)
Résultat d'exécution
average: 0.0016613604403100909
mean: 0.002270303561817855
Même dans ce cas, «np.average» était rapide.
J'ai essayé d'autres conditions similaires, mais le résultat était que «np.average» était plus rapide. Cela ne veut pas dire np.mean
...
Je pensais que ce n'était pas le cas, et quand j'ai cherché plus loin, j'ai trouvé un tel fil. Traduit, modifié et cité ci-dessous:
(Omis) Il y a d'autres différences à considérer entre «moyenne» et «moyenne» (d'autres différences ont été mentionnées dans le fil précédent). «average» prend la moyenne de toutes les valeurs du tableau sans tenir compte du masque, tandis que «mean» prend le masque, donc il prend la moyenne uniquement avec les valeurs non masquées.
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
En effet, il semble que «mean» devrait être utilisé lorsqu'il s'agit de tableaux contenant des valeurs manquantes.
numpy.ma
pour gérer des données contenant des valeurs manquantes, utilisez mean
Il est préférable de l'utiliser correctement en fonction de l'objectif, mais compte tenu du temps nécessaire pour l'ensemble du programme, je pense que le rapport entre «moyenne» et «moyenne» est insignifiant, donc l'option d'utiliser «moyenne» sans penser à rien N'est-ce pas une fourmi?