2013-09-29 234 views
1

我必须使用列表的循环计算标准偏差。 这是我有:如何使用Python上的循环计算标准偏差

elif user_option == 2: 
    stdev= 0 
    average = 0 
    for val in scores_list: 
    diffsquared= (val - average)**2 
    sum_diffsquared= diffsquared + val 
    stdev= ((sum_diffsquared)/num_scores)**(1/2) 
    print(stdev) 

我一直在得到错误的数字。

回答

2

你的代码中有几个问题。首先,在循环之外计算“sum_diffsquared”。其次,你声明平均值为0.你需要首先计算平均值。

import numpy 
import scipy 

stddev = 0 
average = 0 
scores = [0,1,2,3,4] 
average = numpy.mean(scores) #or calculate it yourself 
diffsquared = 0 
sum_diffsquared = 0 
for val in scores: 
    diffsquared = (val-average)**2 
    sum_diffsquared = diffsquared + sum_diffsquared 
stddev = ((sum_diffsquared)/len(scores))**(1/2) # corrected 
print(stddev) 
print(numpy.sqrt(numpy.var(scores))) 

的输出是:

1.41421356237 
1.41421356237 

显示,计算现在是正确的。

+0

我所做的是我在elif语句之前计算了elif语句中的平均值。但由于某种原因,它说“平均”未定义 – user300

+0

您必须计算相应的'if'语句之前的平均值。您应该熟悉变量范围的概念(http://en.wikipedia.org/wiki/Scope_(computer_science))。总之,你的变量“平均值”对于'elif'范围是未定义的。如果您在'if/elif'语句之前声明“平均值”,则该变量仍将通过所有'if/elif'范围可见。 – andrew