2017-06-20 41 views
0

我在這段代碼中有一個錯誤,因爲我想計算(x1)和(x2)列表中的值之間的差異。任何建議?!方差函數方程的計算

def my_var(L): 
    s = 0 
    t = 0 
    u = 0 
    for i in range(0, len(L)): 
     s += L[i] 
     t = s/len(L) 
     u += ((L[i]-t)*(L[i]-t)) 
    return u/len(L) 
x1 = [1, 3, 4, -3, 8] 
x2 = [1, -4, 7, 2] 
v1 = my_var(x1) 
v2 = my_var(x2) 
print(v1) 
print(v2) 
+0

這是什麼編程語言?它是Python嗎?請用正在使用的語言標記您的問題。要更新您的問題,請點擊帖子下的**「[edit]」**鏈接。謝謝。 – Pang

回答

0

嘗試numpy。

import numpy as np 
x1 = [1, 3, 4, -3, 8] 
x2 = [1, -4, 7, 2] 
v1 = np.var(x1) 
v2 = np.var(x2) 
+0

感謝您的幫助,但我想用簡單的方法解決它 我認爲我在這一行有一個問題 u + =((L [i] -t)*(L [i] -t)) –

1

根據我如何學習概率和統計信息,你做了很多不正確的事情。您需要計算平均值(平均值),然後將每個值減去平均值的平方。然後最後採取這個分子,並且比樣本大小(n-1)小1。

def my_var(L): 
    mean = float(sum(L)/Len(L)) 
    numerator = 0 
    for i in range(0, len(L)): 
     numerator += (L[i]-mean)**2 
    return numerator/(len(L) - 1) 
x1 = [1, 3, 4, -3, 8] 
x2 = [1, -4, 7, 2] 
v1 = my_var(x1) 
v2 = my_var(x2) 
print(v1) 
print(v2) 

沒有使用金額:

def my_var(L): 
    my_sum = 0 
    mean = 0 
    numerator = 0 
    for i in range(0, len(L)): 
     my_sum += L[i] 
    mean = float(my_sum/len(L)) 
    for i in range(0, len(L)): 
     numerator += (L[i]-mean)**2 
    return numerator/(len(L) - 1) 
x1 = [1, 3, 4, -3, 8] 
x2 = [1, -4, 7, 2] 
v1 = my_var(x1) 
v2 = my_var(x2) 
print(v1) 
print(v2) 
+0

非常感謝您的幫助,但仍然無法正常工作。實際上,我很好地理解了這個方程,正如你首先提到的,我必須計算平均值和每個值與平均值之間的差值的平方和(僅爲-1)。當我檢查我的代碼直到t = s/len(L)時,它就可以工作。但在下一行的問題肯定是 u + =((L [i] -t)*(L [i] -t))。如果您可以修改這部分,我將非常感謝您的幫助。 –

+2

你的問題是你在你發佈的例子中計算錯誤。你的't'應該是x-bar(意思),不是那樣的。你有一些基本的缺陷,所以除了完全重寫之外都是錯誤的。我編輯了這篇文章來解決我的錯誤。 –

0

謝謝@billy_ferguson。我已經修改了你的代碼,它工作。執行我,我仍然是一個業餘的,但你可以取代浮動和求和函數,並使用更簡單的算術運算符爲len(L)和+ =在這一行mean = float(sum(L)/ len(L))

def my_var(L): 
    mean = 0 
    numerator = 0 
    for i in range(0, len(L)): 
     mean = float(sum(L)/len(L)) 
     numerator += (L[i]-mean)**2 
    return numerator/len(L) 
x1 = [1, 3, 4, -3, 8] 
x2 = [1, -4, 7, 2] 
v1 = my_var(x1) 
v2 = my_var(x2) 
print(v1) 
print(v2) 
+1

不要這樣做。很壞。你在一個不會改變的循環中重複相同的事情。您可以通過在列表L上循環來計算總和,並用'+ ='將其相加,但sum是一個內置的語言實用程序,所以我相信它帶有標準的python版本。 –