Python >> Tutoriel Python >  >> Python Tag >> NumPy

Comment calculer la moyenne pondérée d'un tableau numpy en Python ?

Formulation du problème : Comment calculer la moyenne pondérée des éléments d'un tableau NumPy ?

Moyenne pondérée par définition : Chaque élément du tableau a un poids associé. La moyenne pondérée est la somme de tous les éléments du tableau, correctement pondérée, divisée par la somme de tous les poids.

Voici le problème illustré :

Solution rapide : Avant de discuter de la solution en détail, voici la solution qui résout ce problème précis :

import numpy as np

array = np.array([[1, 0, 2],
                  [1, 1, 1]])
weights = np.array([[2, 1, 1],
                    [1, 1, 2]])

print(np.average(array, weights=weights))
# 1.0

Vous voulez savoir comment cela fonctionne et comment vous pouvez également effectuer une moyenne le long d'un axe ? Approfondissons le problème ensuite !

Moyenne pondérée avec la fonction np.average() de NumPy

np.average(arr) de NumPy La fonction calcule la moyenne de toutes les valeurs numériques dans un tableau NumPy. Lorsqu'il est utilisé avec un seul argument de tableau, il calcule la moyenne numérique de toutes les valeurs du tableau, quelle que soit la dimensionnalité du tableau. Par exemple, l'expression np.average([[1,2],[2,3]]) donne la valeur moyenne (1+2+2+3)/4 = 2.0 .

Cependant, que se passe-t-il si vous souhaitez calculer la moyenne pondérée d'un tableau NumPy ? En d'autres termes, vous voulez surpondérer t certaines valeurs de tableau et sous-pondèrent les autres.

Vous pouvez facilement accomplir cela avec la fonction moyenne de NumPy en passant l'argument des poids au NumPy average fonction.

import numpy as np

a = [-1, 1, 2, 2]

print(np.average(a))
# 1.0

print(np.average(a, weights = [1, 1, 1, 5]))
# 1.5

Dans le premier exemple, nous avons simplement fait la moyenne de toutes les valeurs du tableau :(-1+1+2+2)/4 = 1.0 . Cependant, dans le deuxième exemple, nous surpondérons le dernier élément du tableau 2 - il porte maintenant cinq fois le poids des autres éléments, ce qui donne le calcul suivant :(-1+1+2+(2+2+2+2+2))/8 = 1.5 .

Vidéo moyenne pondérée NumPy

Syntaxe de la moyenne NumPy

Explorons les différents paramètres que nous pouvons passer à np.average(...) .

  • Le tableau NumPy qui peut être multidimensionnel.
  • (Facultatif) L'axe le long duquel vous voulez faire la moyenne. Si vous ne spécifiez pas d'argument, le calcul de la moyenne est effectué sur l'ensemble du tableau.
  • (Facultatif) Les pondérations de chaque colonne de l'axe spécifié. Si vous ne spécifiez pas l'argument, les poids sont supposés être homogènes.
  • (Facultatif) La valeur renvoyée de la fonction. Ce n'est que si vous le définissez sur True que vous obtiendrez un tuple (average, weights_sum) en conséquence. Cela peut vous aider à normaliser la sortie. Dans la plupart des cas, vous pouvez ignorer cet argument.
average(a, axis=None, weights=None, returned=False)
Argument Description
a semblable à un tableau :Le tableau contient les données à moyenner. Peut être multidimensionnel et il n'est pas nécessaire qu'il s'agisse d'un tableau NumPy, mais c'est généralement le cas.
axis=None Aucun ou entier ou tuple d'entiers : L'axe le long duquel faire la moyenne du tableau a .
weights=None semblable à un tableau :Un tableau de poids associé aux valeurs du tableau a . Cela vous permet de personnaliser le poids vers la moyenne de chaque élément du tableau.
returned=False Booléen :Si False , renvoie la valeur moyenne. Si True , renvoie le tuple du (average, sum_of_weights) afin que vous puissiez facilement normaliser la moyenne pondérée.

Moyenne pondérée NumPy le long d'un axe (Puzzle)

Voici un exemple de moyenne le long des colonnes d'un tableau NumPy 2D avec des pondérations spécifiées pour les deux lignes.

import numpy as np

# daily stock prices
# [morning, midday, evening]
solar_x = np.array(
    [[2, 3, 4], # today
     [2, 2, 5]]) # yesterday

# midday - weighted average
print(np.average(solar_x, axis=0, weights=[3/4, 1/4])[1])

Quel est le résultat de ce puzzle ?
*Niveau Débutant* (solution ci-dessous)

Vous pouvez également résoudre ce puzzle dans notre application d'apprentissage basée sur des puzzles (100 % GRATUIT) :testez vos compétences maintenant !

Explication du casse-tête

Numpy est une bibliothèque Python populaire pour la science des données axée sur les tableaux, les vecteurs et les matrices.

Ce puzzle présente la fonction moyenne de la bibliothèque NumPy. Lorsqu'elle est appliquée à un tableau NumPy 1D, cette fonction renvoie la moyenne des valeurs du tableau. Lorsqu'il est appliqué à un tableau NumPy 2D, il aplatit simplement le tableau. Le résultat est la moyenne du tableau 1D aplati.

Dans le puzzle, nous avons une matrice à deux lignes et trois colonnes. La matrice donne les cours boursiers du solar_x Stock. Chaque ligne représente les prix pour une journée. La première colonne précise le prix du matin, la deuxième le prix du midi et la troisième le prix du soir.

Supposons maintenant que nous ne voulions pas connaître la moyenne de la matrice aplatie mais la moyenne du prix à midi. De plus, nous voulons surpondérer le cours de l'action le plus récent. Aujourd'hui représente les trois quarts et hier un quart de la valeur moyenne finale.

NumPy permet cela via le weights paramètre en combinaison avec le axis paramètre.

  • Le weights Le paramètre définit le poids de chaque valeur participant au calcul de la moyenne.
  • Le axis paramètre spécifie la direction dans laquelle la moyenne doit être calculée.

Dans une matrice 2D, la ligne est spécifiée sous la forme axis=0 et la colonne comme axis=1 . Nous voulons connaître trois valeurs moyennes, pour le matin, le midi et le soir. Nous calculons la moyenne le long de la ligne, c'est-à-dire axis=0 . Il en résulte trois valeurs moyennes. Maintenant, nous prenons le deuxième élément pour obtenir la variance de midi.