我写了一个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)
字符串
输出:The standard deviation is 9443.71609738
Excel:9986.83890663
3条答案
按热度按时间zazmityj1#
你的问题主要是由于你的循环中计算总和的代码。在这个循环中,你也在计算每次迭代的结果,然后从函数返回。这意味着循环中只有一次迭代运行。
当运行你的代码时,我得到的结果是2258.72114877,它是仅从第一个值计算的。通过将代码更改为以下内容,可以生成正确的样本标准差:
字符串
此新结果与Excel中的值不同的原因是Excel返回的是总体标准差。作为快速参考,以下页面可能对您有用:
https://statistics.laerd.com/statistical-guides/measures-of-spread-standard-deviation.php
如果没有从头开始编写代码的要求,我建议使用Numpy来避免重新发明轮子:http://www.numpy.org/。有了这个,你的代码变成:
型
几个额外的提示:为了避免将来的混淆和潜在的问题,尽量避免将函数参数命名为全局变量。2尽量不要依赖于函数中以前设置的变量(就像你在这里使用“mean”一样)。
xa9qqrwz2#
问题是你在循环中有return!
应采取以下措施:
字符串
而不是标准差,你需要除以长度而不是长度-1(如果你有一个样本,而不是整个人口)。
erhoui1w3#
考虑缩短你的函数以提高可读性!
字符串