2013-09-29 265 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