python中数字列表的方差

时间:2017-10-15 04:18:28

标签: python python-3.x

出于某种原因,我的下面的代码没有给我正确的解决方案来解决x = [7,6,8,4,2,7,6,7,6,5]的样本方差。解决方案应该是3.067,但我一直得到11.044,我不知道为什么。有人可以帮忙吗?

def var_method_0(x):
    n = len(x) # Number of samples
    mean=sum(x)/n
    variance=sum([((mean-i)**2) for i in range(n)])/(n-1)
    return variance

1 个答案:

答案 0 :(得分:4)

试试这个:

def var_method(lst):
    n = len(lst)
    mean = sum(lst) / float(n)
    return sum((mean - x) ** 2 for x in lst) / float(n - 1)

我修了两件事:

  • 确保分区返回浮点值(在Python 3.x中不是问题,但在Python 2.x中可能会弄乱)
  • 在您计算实际差异的行中,您不想迭代range,而是超过数字列表的实际值

除此之外,我还进行了一些清理和重命名,以使代码更简洁。现在它按预期工作:

var_method([7, 6, 8, 4, 2, 7, 6, 7, 6, 5])
=> 3.066666666666667