2017-02-28 92 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。)

相关问题