Python标准偏差检查

Python标准偏差检查,python,excel,python-2.7,Python,Excel,Python 2.7,我已经编写了一个python代码来计算数字列表的标准偏差。我在excel上检查了我的答案,它似乎是关闭的。我不确定我是否错过了一个步骤,或者我是否应该担心,但是如果有人有时间检查代码,看看他们是否注意到错误,请让我知道。多谢各位 city_population = [2123,1284,7031,30788,147,2217,10000] mean = sum(city_population,0.0)/len(city_population) def stdev(city_populatio

我已经编写了一个python代码来计算数字列表的标准偏差。我在excel上检查了我的答案,它似乎是关闭的。我不确定我是否错过了一个步骤,或者我是否应该担心,但是如果有人有时间检查代码,看看他们是否注意到错误,请让我知道。多谢各位

city_population = [2123,1284,7031,30788,147,2217,10000]

mean = sum(city_population,0.0)/len(city_population)

def stdev(city_population):
    length = len(city_population)
    total_sum = 0
    for i in range(length):
        total_sum += pow((city_population[i]-mean),2)
        result = (total_sum/(length-1))
        return sqrt(result)
stan_dev = stdev(city_population)
print "The standard deviation is",(stan_dev)
输出:
标准偏差为9443.71609738


excel:
9986.83890663

您的问题主要是由于循环中用于计算总金额的代码造成的。在这个循环中,您还需要计算每次迭代的结果,然后从函数返回。这意味着循环只运行一次迭代

运行代码时,我得到的结果是2258.72114877,它仅从第一个值计算得出。通过将代码更改为以下值,可产生正确的样品标准偏差:

city_population = [2123,1284,7031,30788,147,2217,10000]

mean = sum(city_population,0.0)/len(city_population)

def stdev(city_population):
    length = len(city_population)
    total_sum = 0
    for i in range(length):
        total_sum += pow((city_population[i]-mean),2)
    # total_sum is 698158659.4285713
    result = (total_sum/(length-1))
    # result is 116359776.57142855
    # sqrt(result) is 10787.01889177119
    return sqrt(result)

stan_dev = stdev(city_population)
print "The standard deviation is",(stan_dev)
此新结果与Excel中的值不同的原因是Excel返回总体标准偏差。作为快速参考,以下页面可能对您有用:

如果没有从头开始编写代码的要求,我建议使用Numpy以避免在此处重新发明轮子:。这样,您的代码就变成:

import numpy
city_population = [2123,1284,7031,30788,147,2217,10000]
numpy.std(city_population, ddof=1)

另外两个提示:为了避免将来的混淆和潜在问题,请尽量避免将函数参数命名为与全局变量相同的名称。并且尽量不要依赖函数中以前设置的变量(就像这里的“mean”一样)。

您的问题主要是由于循环中用于计算总和的代码造成的。在这个循环中,您还需要计算每次迭代的结果,然后从函数返回。这意味着循环只运行一次迭代

运行代码时,我得到的结果是2258.72114877,它仅从第一个值计算得出。通过将代码更改为以下值,可产生正确的样品标准偏差:

city_population = [2123,1284,7031,30788,147,2217,10000]

mean = sum(city_population,0.0)/len(city_population)

def stdev(city_population):
    length = len(city_population)
    total_sum = 0
    for i in range(length):
        total_sum += pow((city_population[i]-mean),2)
    # total_sum is 698158659.4285713
    result = (total_sum/(length-1))
    # result is 116359776.57142855
    # sqrt(result) is 10787.01889177119
    return sqrt(result)

stan_dev = stdev(city_population)
print "The standard deviation is",(stan_dev)
此新结果与Excel中的值不同的原因是Excel返回总体标准偏差。作为快速参考,以下页面可能对您有用:

如果没有从头开始编写代码的要求,我建议使用Numpy以避免在此处重新发明轮子:。这样,您的代码就变成:

import numpy
city_population = [2123,1284,7031,30788,147,2217,10000]
numpy.std(city_population, ddof=1)

另外两个提示:为了避免将来的混淆和潜在问题,请尽量避免将函数参数命名为与全局变量相同的名称。并且尽量不要依赖于函数中以前设置的变量(就像这里的“mean”一样)。

问题在于循环中有返回

以下方面应起作用:

def stdev(city_population):
    length = len(city_population)
    total_sum = 0
    for i in range(length):
        total_sum += pow((city_population[i]-mean),2)
    result = (total_sum/(length))
    return sqrt(result)

对于标准差,你需要除以长度而不是长度-1(如果你有一个样本,而不是整个人群的话)

问题是你在循环中有返回

以下方面应起作用:

def stdev(city_population):
    length = len(city_population)
    total_sum = 0
    for i in range(length):
        total_sum += pow((city_population[i]-mean),2)
    result = (total_sum/(length))
    return sqrt(result)

对于标准差,你需要除以长度而不是长度-1(如果你有一个样本,而不是整个人群的话)

您使用的是哪个excel函数?您使用的是哪个excel函数?谢谢您的指导。我将再次评估我的代码并进行适当的更改。感谢您的指导。我将再次评估我的代码并进行适当的更改。