Python 标准差计算误差

Python 标准差计算误差,python,math,standard-deviation,Python,Math,Standard Deviation,我试图弄明白为什么这个过程给了我一个错误的答案 对于[1,2,3,4,5],我得到的是1.2而不是1.414 def standard_deviation(number_list): average = sum(number_list) / float(len(number_list)) stdev = 0 for value in number_list: stdev += math.sqrt((average - value)**2) / float(len(numb

我试图弄明白为什么这个过程给了我一个错误的答案

对于[1,2,3,4,5],我得到的是1.2而不是1.414

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

standard_deviation([1,2,3,4,5])

你不正确地执行了这个公式

定义是“标准偏差是平均值的平方偏差平均值的平方根。”

代码
math.sqrt((平均值)**2)
不符合您的要求;sqrt和**2有点相互抵消,因此结果只是
abs(平均值)

numpy页面简洁地将实现描述为
std=sqrt(mean(abs(x-x.mean())**2))

对代码进行以下更正将更有效:

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

重新检查文本中的公式。标准偏差通常会除以
len(数字列表)-1
。sqdev+=(平均值)**2/浮点(len(数字列表))会在一行上工作吗?是的,你可以做一个运行平均值。根据您的目标,有几种方法可以优化功能。