索引错误:双重'for'语句的无效索引
我的目的是通过在一个循环里面再放一个循环,来重复计算某个变量的列表。
我的代码如下。
for b in range(0,1487):
c = 18000*b
alpha = np.arctan(np.mean(v[c:c+18000])/np.mean(u[c:c+18000]))
beta = np.arctan(np.mean(w[c:c+18000])/np.mean(u[c:c+18000]))
R01 = R01.reshape((3,3))
for c1 in range(c,c+18000):
windvector = np.array([u[c1],v[c1],w[c1]])
WV = windvector.reshape((3,1))
m = np.dot(R01,WV)
m = m.reshape((1,3))
m = list(m)
M = M + m
for c2 in range(0,18000):
u = M[c2][0]
A = A + [u]
m1 = np.mean(A[0:3000])
m2 = np.mean(A[3000:3000*2])
m3 = np.mean(A[3000*2:3000*3])
m4 = np.mean(A[3000*3:3000*4])
m5 = np.mean(A[3000*4:3000*5])
m6 = np.mean(A[3000*5:3000*6])
M = [m1,m2,m3,m4,m5,m6]
s1 = np.std(A[0:3000])
s2 = np.std(A[3000:3000*2])
s3 = np.std(A[3000*2:3000*3])
s4 = np.std(A[3000*3:3000*4])
s5 = np.std(A[3000*4:3000*5])
s6 = np.std(A[3000*5:3000*6])
S = [s1,s2,s3,s4,s5,s6]
RN = fabs((np.mean(S)-np.std(A))/np.std(A))
RNT = RNT + [RN]
在代码中,我想要重复得到1487个RN值,但当我运行这段代码时,它只运行了一次就停止了,显示了一个错误信息:“File 'RN_stationarity.py', line 25, in alpha = np.arctan(np.mean(v[c:c+18000])/np.mean(u[c:c+18000])) IndexError: invalid index to scalar variable.”
我不太明白为什么会出现这样的错误。我在StackOverflow上尝试了一些解决方案,但都没有用。
你能给我一些建议或帮助吗?
非常感谢。
谢谢,
艾萨克
1 个回答
3
你的问题在于,你把名字 u
用在了两个完全不同的地方。一开始这个循环的时候,u
是一个很大的数组,但在循环的中间你把它重新赋值成了一个单一的数值,所以当你下次再用它的时候,就会出现 IndexError
的错误。
根据评论:
u
应该总共有 1487*18000 个数字,我已经检查过了。
所以,这就是我知道它一开始是有效的原因。
但是在循环的中间:
for c2 in range(0,18000):
u = M[c2][0]
A = A + [u]
根据其他评论,M
是一个二维数组。所以在这个循环结束后,u
变成了一个零维数组(也就是一个单一的数值)。
解决办法就是不要把名字 u
用在两个无关的东西上。把其中一个改成其他的名字。
更一般来说,解决办法是不要使用没有意义的单字母变量名,因为这样很容易不小心重用一个名字,也很难发现自己已经重用了。