我的目的是使用for语句中的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值,但是当我运行此代码时, 这在预期的1487中仅在1次旋转后停止,显示错误消息"文件" RN_stationarity.py",第25行,在alpha = np.arctan中(np.mean(v [c:c] +18000])/ np.mean(u [c:c + 18000]))IndexError:标量变量的索引无效。"
我不确定为什么会遇到这种错误。我在stackoverflow中尝试了一些解决方案,但它没有用。
请您提出一些想法或帮助吗?
非常感谢。
谢谢,
艾萨克
答案 0 :(得分:3)
您的问题是您使用名称u
来表示两个完全不同的值。在这个循环的开始,它是一个很好的大数组,但是在循环的中间你将它重新分配给标量,因此当你下次通过循环尝试索引它时IndexError
。
来自评论:
u
应该有1487 * 18000个号码,我已经检查了
所以,这就是我知道它开始有效的方式。
然后在循环中间:
for c2 in range(0,18000):
u = M[c2][0]
A = A + [u]
从其他评论中,M
是一个2D数组。因此,在此循环之后,u
是一个0D数组(即标量)。
解决方案是不要将名称u
用于两个不相关的事情。将其中一个重命名为其他内容。
更一般地说,解决方案是不使用无意义的单字母变量名称,因为当你这样做时,很难避免意外地重复使用它,并且很难分辨你何时这样做。