2017-02-28 91 views
0

我不知道爲什麼我會收到索引錯誤。我對Python很新,因此無法弄清楚該怎麼做。我認爲我正在初始化一些錯誤的維度,但我無法打破它。索引1超出大小爲1的軸0的邊界

import numpy as np 
import matplotlib as plt 

x = np.array([45, 68, 41, 87, 61, 44, 67, 30, 54, 8, 39, 60, 37, 50, 19, 86, 42, 29, 32, 61, 25, 77, 62, 98, 47, 36, 15, 40, 9, 25, 34, 50, 61, 75, 51, 96, 20, 13, 18, 35, 43, 88, 25, 95, 68, 81, 29, 41, 45, 87,45, 68, 41, 87, 61, 44, 67, 30, 54, 8, 39, 60, 37, 50, 19, 86, 42, 29, 32, 61, 25, 77, 62, 98, 47, 36, 15, 40, 9, 25, 34, 50, 61, 75, 51, 96, 20, 13, 18, 35, 43, 88, 25, 95, 68, 81, 29, 41, 45, 87]) 
len_x = len(x) 
mean = np.mean(x) 

xup = np.zeros(shape=(1,120)) 
for i in range(len_x) : 
    xup[i] = (x[i] - mean) ** 2 

xup_sum = np.sum(xup) 
var = xup_sum/len_x 
std_dev = var ** 0.5 

z = np.zeros(shape = (1,120)) 
for i in range(len_x) : 
    z[i] = (x[i] - mean)/std_dev 

print("Mean :", mean) 
print("Standard_dev :",std_dev) 
print("Variance : ",var) 
+0

爲什麼你將'xup'設置爲形狀(1,120)的二維數組?嘗試使它成爲一維:'xup = np.zeros(shape = 120)' –

回答

0

xup是二維的。因此,而不是xup[i]你需要xup[0][i]

只是解決這2個地方:

xup = np.zeros(shape=(1,120)) 
for i in range(len_x) : 
    xup[0, i] = (x[i] - mean) ** 2 

然後再在這裏:

z = np.zeros(shape = (1,120)) 
for i in range(len_x) : 
    z[0, i] = (x[i] - mean)/std_dev 

這將是您發佈上面的這兩個變化的文件:

import numpy as np 
import matplotlib as plt 

x = np.array([45, 68, 41, 87, 61, 44, 67, 30, 54, 8, 39, 60, 37, 50, 19, 86, 42, 29, 32, 61, 25, 77, 62, 98, 47, 36, 15, 40, 9, 25, 34, 50, 61, 75, 51, 96, 20, 13, 18, 35, 43, 88, 25, 95, 68, 81, 29, 41, 45, 87,45, 68, 41, 87, 61, 44, 67, 30, 54, 8, 39, 60, 37, 50, 19, 86, 42, 29, 32, 61, 25, 77, 62, 98, 47, 36, 15, 40, 9, 25, 34, 50, 61, 75, 51, 96, 20, 13, 18, 35, 43, 88, 25, 95, 68, 81, 29, 41, 45, 87]) 
len_x = len(x) 
mean = np.mean(x) 

xup = np.zeros(shape=(1,120)) 
for i in range(len_x) : 
    xup[0, i] = (x[i] - mean) ** 2 

xup_sum = np.sum(xup) 
var = xup_sum/len_x 
std_dev = var ** 0.5 

z = np.zeros(shape = (1,120)) 
for i in range(len_x) : 
    z[0, i] = (x[i] - mean)/std_dev 

print("Mean :", mean) 
print("Standard_dev :",std_dev) 
print("Variance : ",var) 
+0

'xup'是一個二維numpy數組,所以不是'xup [0] [i]',它應該是'xup [ 0,我]'。 –

0

你真的應該告訴我們錯誤發生在哪裏。但我可以猜到:

xup = np.zeros(shape=(1,120)) 
for i in range(len_x) : 
    xup[i,:] = (x[i] - mean) ** 2 #<===== 

(類似z環以下)

我添加了一個隱含的,:。您的xup[i]正在索引第一個維度。但是,這只是大小1.創建它是第二個維度很大。 xup[0,i]是正確的索引。

爲什麼xup 2d與(1,120)形狀?爲什麼不與x(我認爲是(120,))具有相同的形狀? xup = np.zeros(len_x)

更好的是使用適當的numpy陣列計算:

xup = (x-mean)**2 

然而,這xup具有形狀(100),同樣爲x

您已經在使用np.mean(x),它在整個x上運行。運營商如-**也是如此。

(早些時候我會建議使用np.zeros_like(x),但後來意識到,這將創建一個整數數組一樣x。從計算分配浮點值,這將產生問題。如果做一個分配和填充循環中,您需要注意到目標陣列的形狀和dtype。)

相關問題