En fait, la documentation ne le rend pas immédiatement clair, pour autant que je puisse le voir. Ne pas dire que c'est impossible à dire, mais je pense que cette question est tout de même valable pour Stack Overflow.
BlackVegetable
1
numpy.mean: renvoie la moyenne des éléments du tableau.
joaquin
@joaquin: "Calculez la moyenne arithmétique le long de l'axe spécifié." vs "Calculez la moyenne pondérée le long de l'axe spécifié."?
Blender
@Blender à droite. J'essayais juste de faire une sorte de réponse amusante à votre commentaire parce que si je suis vos instructions, la première chose que j'ai lue dans la documentation pour numpy.mean est numpy.mean: renvoie la moyenne des éléments du tableau, ce qui est amusant si vous êtes à la recherche de la réponse à la question OP.
joaquin
Réponses:
181
np.average prend un paramètre de poids facultatif. S'il n'est pas fourni, ils sont équivalents. Jetez un œil au code source: Moyenne , Moyenne
Pourquoi offrent-ils deux fonctions différentes? Semble qu'ils devraient juste offrir np.averagecar weightsc'est déjà facultatif. Cela semble inutile et ne sert qu'à confondre les utilisateurs.
Geoff
6
@Geoff Je préférerais qu'ils lancent une NotImplementedException pour "moyenne", pour informer les utilisateurs que la moyenne arithmétique n'est pas identique à "la moyenne".
FooBar
27
np.mean calcule toujours une moyenne arithmétique, et a quelques options supplémentaires pour l'entrée et la sortie (par exemple, quels types de données utiliser, où placer le résultat).
np.averagepeut calculer une moyenne pondérée si le weightsparamètre est fourni.
En plus des différences déjà notées, il y a une autre différence extrêmement importante que je viens de découvrir à la dure: contrairement à np.mean, np.averagen'autorise pas le dtypemot - clé, ce qui est essentiel pour obtenir des résultats corrects dans certains cas. J'ai un très grand tableau simple précision auquel on accède à partir d'un h5fichier. Si je prends la moyenne le long des axes 0 et 1, j'obtiens des résultats complètement incorrects sauf si je spécifie dtype='float64':
Malheureusement, à moins que vous ne sachiez quoi rechercher, vous ne pouvez pas nécessairement dire que vos résultats sont erronés. Je ne l'utiliserai np.averageplus jamais pour cette raison mais je l'utiliserai toujours np.mean(.., dtype='float64')sur n'importe quel grand tableau. Si je veux une moyenne pondérée, je la calculerai explicitement en utilisant le produit du vecteur de poids et du tableau cible, puis soitnp.sum ou np.mean, selon le cas (avec une précision appropriée également).
Réponses:
np.average prend un paramètre de poids facultatif. S'il n'est pas fourni, ils sont équivalents. Jetez un œil au code source: Moyenne , Moyenne
np.mean:
np.average:
la source
np.average
carweights
c'est déjà facultatif. Cela semble inutile et ne sert qu'à confondre les utilisateurs.np.mean
calcule toujours une moyenne arithmétique, et a quelques options supplémentaires pour l'entrée et la sortie (par exemple, quels types de données utiliser, où placer le résultat).np.average
peut calculer une moyenne pondérée si leweights
paramètre est fourni.la source
Dans une version de numpy il existe une autre différence importante dont vous devez être conscient:
average
ne tenez pas compte des masques, calculez donc la moyenne sur l'ensemble des données.mean
prend en compte les masques, donc calculez la moyenne uniquement sur les valeurs non masquées.la source
np.ma.average
fonctionne. En outre, il existe un rapport de bogue .Dans votre appel, les deux fonctions sont identiques.
average
peut cependant calculer une moyenne pondérée.Liens doc:
mean
etaverage
la source
En plus des différences déjà notées, il y a une autre différence extrêmement importante que je viens de découvrir à la dure: contrairement à
np.mean
,np.average
n'autorise pas ledtype
mot - clé, ce qui est essentiel pour obtenir des résultats corrects dans certains cas. J'ai un très grand tableau simple précision auquel on accède à partir d'unh5
fichier. Si je prends la moyenne le long des axes 0 et 1, j'obtiens des résultats complètement incorrects sauf si je spécifiedtype='float64'
:Malheureusement, à moins que vous ne sachiez quoi rechercher, vous ne pouvez pas nécessairement dire que vos résultats sont erronés. Je ne l'utiliserai
np.average
plus jamais pour cette raison mais je l'utiliserai toujoursnp.mean(.., dtype='float64')
sur n'importe quel grand tableau. Si je veux une moyenne pondérée, je la calculerai explicitement en utilisant le produit du vecteur de poids et du tableau cible, puis soitnp.sum
ounp.mean
, selon le cas (avec une précision appropriée également).la source