next up previous contents
Next: Tuple Up: Liste Previous: e ovvero sommatorie e   Indice

Valore medio e deviazione standard

Abbiamo introdotto il modo di calcolare con python una sommatoria o un aproduttoria. Adesso che siamo in grado di trattare anche liste di numeri, vediamo come si può calcolare il valore medio di un insieme di numeri $X\{i\}$ ossia

\begin{eqnarray*}
av= \frac{\sum_{i=1}^{N} X(i)}{N}
\end{eqnarray*}



e la deviazione standard ($\sigma$)

\begin{eqnarray*}
\sigma^2 &= &\frac{\sum_{i=1}^{N} (X(i)-av)^2}{N-1} \\
\sigma &= &\sqrt{\sigma^2}
\end{eqnarray*}



Ricordandoci che le sommatorie si trasformano in cicli il seguente codice implementa direttamente il calcolo
# importiamo il modulo math
# che contiene varie funzioni matematiche
# che possiamo utilizzare tra cui la radice quadrata 
# math.sqrt(x)=pow(x,0.5)

import math

def average(x):
    ''' average(x) x is a vector '''
    d=len(x)
    av=0
    for e in x:
        av = av + e
    av = float(av) / d
    return av

def sig2(x,av=None):
    ''' sig2(x,av=None) x is a vector '''
    d=len(x)
    if not av :
        av = average(x)
    s2=0
    for e in x:
        dev = e - av
        s2 = s2 + dev*dev
    if d > 1 :
        s2 = float(s2) / (d - 1)
    return s2

# in python esiste la variabile ambiente __name__
# essa indica il nome dell'oggetto in esecuzione
# il primo modulo lanciato ha settato il valore
# di __name__ uguale a '__main__'. Se quindi
# scriviamo un file con il codice seguente
# esso sara` eseguito soltanto se lanciato
# direttamente. Mentre non lo sara` se importanto
# in un altro modulo.
if __name__ == '__main__':
   numdata=input('number of data = ')
   if numdata <= 0 :
       print " not enough data ! ", numdata
   else:
       i = 0
       x=[]
       while i < numdata :
           d=input('give me a value = ')
           x.append(d)
           i =i+1
       av=average(x)
       s2=sig2(x,av)
       print "data",x
       print "average = ",av, "standard deviation =", math.sqrt(s2)



2004-11-02