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)