Medie, altre

Considera una lista di numeri e, per la media pesata, anche una lista di pesi

Media geometrica

  • \displaystyle m_g=\sqrt[n]{x_1\cdot x_2 \dots  x_n}
  • La radice ennesima del prodotto
NUMERI = [...]

prodotto = 1
for x in NUMERI:
    prodotto *= x

n   = len(NUMERI)
m_g = prodotto**(1/n)

Da Python 3.8 è disponibile la funzione statistics.geometric_mean(z)

...
m_g = statistics.geometric_mean(NUMERI)

Media quadratica

  • \displaystyle m_q=\sqrt{\frac{x_1^2+ x_2^2+ \dots +x_n^2}{n}
  • La radice quadrata della media aritmetica dei quadrati
import math

NUMERI = [...]

somma=0
for x in NUMERI:
    somma += x**2

n   = len(NUMERI)
m_q = math.sqrt(somma/n)

Media armonica

  • \displaystyle m_a=\frac{n}{\frac{1}{x_1}+\frac{1}{x_2}+\dots+ \frac{1}{x_n}}
  • Il reciproco della media aritmetica dei reciproci
NUMERI = [...]

somma = 0 
for x in NUMERI:
    somma += 1/x

n   = len(NUMERI)
m_a = n/somma

Da Python 3.8 è disponibile la funzione statistics.harmonic_mean(z)

...
m_a = statistics.harmonic_mean(NUMERI)

Media pesata

  • \displaystyle m_p=\frac{x_1\cdot p_1 + x_2\cdot p_2+\cdots +x_n\cdot p_n}{p_1+p_2+\dots+p_n}
  • Il rapporto tra la somma dei prodotti e la somma dei pesi
  • La sequenza dei pesi ha la stessa lunghezza della sequenza dei numeri
NUMERI = [...]
PESI = [...]

somma_prod = 0
somma_pesi = 0
n = len(NUMERI)
for i in range(n):
    x = NUMERI[i]
    p = PESI[i]
    somma_prod += x*p
    somma_pesi += p

m_p = somma_prod/somma_pesi

Il codice si semplifica utilizzando la funzione zip()

NUMERI = [...]
PESI = [...]

somma_prod = 0
somma_pesi = 0
for x, p in zip(NUMERI, PESI): 
    somma_prod += x*p
    somma_pesi += p

m_p = somma_prod/somma_pesi