2013-12-17 206 views
-2

我在查找列表的標準偏差時遇到問題,並且不太確定我做錯了什麼。代碼是低於任何幫助,將不勝感激。查找標準偏差

n = len(combTimeArray) 

numbers = [] 

mean = sum(combTimeArray)/len(combTimeArray) 

numbers.append(int(combTimeArray) 

for n in range(len(numbers) - 1) 
     if numbers[n] > mean 
       numbers.append((numbers[n] - average)**2) 
     if numbers[n] < mean 
       numbers.append((mean - numbers[n])**2) 
     SD = (sum(numbers)/len(numbers))**(1/2.0) 
     print SD 
+2

這是功課嗎?如果沒有,請使用'numpy.std'。 – piokuc

+0

@MartijnPieters然而,必須指出,OP接受了建議的編輯http://stackoverflow.com/review/suggested-edits/3603438 –

+0

你真的得到什麼錯誤?請回復追溯 –

回答

1
import numpy 
SD = numpy.std(combTimeArray) 
+0

什麼部分會 進口numpy SD = numpy.std(combTimeArray) 替換? – user3092850

+0

唯一缺少的是combTimeArray的賦值,它也從您的問題中缺失。這段代碼將把標準偏差放在SD中。 –

0

這是很難理解你的代碼:P首先,你可以用for-each循環替換for循環 - >這使你的代碼更容易閱讀和刪除醜陋號[]聲明。

這裏是我的示例代碼(如果你不希望使用numpy的或不便。類似)

from math import sqrt,pow 
numbers = [2,4,4,4,5,5,7,9] 

def standardDeviation(l): 
    mean = sum(l)/len(l) 
    differencelist = [] 
    for elem in l: 
     differencelist.append(pow(elem-mean,2)) 
return sqrt(sum(differencelist)/len(differencelist)) 
0

這已經有一段時間,因爲我必須做的標準偏差,所以你應該仔細檢查數學分手自己(和大家是正確的告訴你這樣做numpy的,除非你必須這樣做了家庭作業或其他原因),但一些注意事項:

  1. Python有一個absolute value function

  2. 你可以做一個for n in numbers,而不是通過索引訪問每個數字 - 更簡單,更清潔。

  3. 它看起來像你的numbers數組首先存儲所有的值,然後你添加每個數字從均值到相同列表的差異。要麼做第二個列表,要麼查看map函數,如果你想要特別花哨。