2015-12-07 2 views
3

J'ai une liste:Existe-t-il une différence entre la fonction STDEV de numpy.std et celle d'Excel?

s = [0.995537725, 0.994532199, 0.996027983, 0.999891383, 1.004754272, 1.003870012, 0.999888944, 0.994438078, 0.992548715, 0.998344545, 1.004504764, 1.00883411] 

où je calcule son écart-type dans Excel, j'ai la réponse: 0.005106477, la fonction I utilisé était: =STDEV(C5:N5)

Ensuite, je fais le même calcul en utilisant numpy.std comme :

import numpy as np 

print np.std(s) 

Cependant, je suis la réponse: 0.0048890791894

J'ai même écrit ma propre fonction std:

def std(input_list): 
     count = len(input_list) 

     mean = float(sum(input_list))/float(count) 

     overall = 0.0 
     for i in input_list: 
      overall = overall + (i - mean) * (i - mean) 

     return math.sqrt(overall/count) 

et ma propre fonction donne le même résultat que numpy. Donc, je me demande s'il y a une telle différence? Ou c'est juste que j'ai fait une erreur?

Répondre

8

Il y a une différence: STDEV d'Excel calcule l'écart-type échantillon, tandis que std de NumPy calcule la population écart-type par défaut (il se comporte comme STDEVP Excel).

Pour faire se comportent de la fonction std de NumPy comme Excel de STDEV, passez la valeur ddof=1:

>>> np.std(s, ddof=1) 
0.0051064766704396617 

Cela calcule l'écart-type de s en utilisant la variance de l'échantillon

(ie en divisant par n-1 plutôt que n.)
+0

J'ai toujours trouvé ces noms Excel trompeurs et confus ... STDEV calcule une estimation de l'écart-type de la population sur la base de l'échantillon, tandis que STDEVP calcule l'écart-type de l'échantillon, qui est la population tion si l'échantillon est l'ensemble de la population. – Jaime