python - Standard Deviation calculation error -


i trying figure out why process gives me wrong answer.

for [1,2,3,4,5] getting 1.2 instead of 1.414

def standard_deviation(number_list):   average = sum(number_list) / float(len(number_list))   stdev = 0   value in number_list:       stdev += math.sqrt((average - value)**2) / float(len(number_list))   return stdev  standard_deviation([1,2,3,4,5]) 

you implemented formula incorrectly.

the definition "the standard deviation square root of average of squared deviations mean." this numpy page explains (see notes section).

the code math.sqrt((average - value)**2) doesn't want; sqrt , **2 sort of cancel each other out result abs(average-value).

the numpy page succinctly describes implementation std = sqrt(mean(abs(x - x.mean())**2)).

the following correction code work better:

def standard_deviation(number_list):   average = sum(number_list) / float(len(number_list))   sqdev = 0   value in number_list:       sqdev += (average-value)**2   sqdev = sqdev / float(len(number_list))   return math.sqrt(sqdev)