Python 索引器错误:双精度';对于';陈述
我的目的是在for语句中重复使用for语句来计算某些变量的列表 我的代码如下Python 索引器错误:双精度';对于';陈述,python,for-loop,Python,For Loop,我的目的是在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
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次后,此操作停止,显示错误消息“File”RN_stationarity.py”,第25行,alpha=np.arctan(np.mean(v[c:c+18000])/np.mean(u[c:c+18000])索引器:标量变量的索引无效。”
我不知道我为什么会犯这种错误。我在stackoverflow中尝试了一些解决方案,但没有成功
你能提供一些想法或帮助吗
非常感谢
谢谢,
Isaac您的问题是,您将名称
u
用于两个完全不同的值。在这个循环的开始时,它是一个很好的大数组,但是在循环的中间,当下次尝试通过循环来索引它时,就将它重新分配给标量,因此,<代码>索引错误> /代码>。
从评论中:
u
应该总共有1487*18000个数字,我已经检查过了
所以,这就是为什么我知道它一开始是有效的
但在循环的中间:
for c2 in range(0,18000):
u = M[c2][0]
A = A + [u]
从其他注释来看,M
是一个二维数组。因此,在这个循环之后,u
是一个0D数组(即标量)
解决方法就是不要将名称
u
用于两个不相关的事物。将其中一个重命名为其他名称
更一般地说,解决方案是不要使用无意义的单字母变量名,因为这样做时,很难避免意外地重复使用一个变量名,也很难判断何时重复使用了一个变量名。-这只是意味着u和/或v是标量变量,即无法索引到它们中。试着在第25行之前打印它们的值,你就会自己看到问题所在。事实上,你可以看到
u
的来源:u=M[c2][0]
。因此,u
的维度显然要比M
小2,M
似乎是一个2D数组,这是基于这样一个事实,即你正在向它添加(1,3)
数组……那么如果u[c:c+18000]
仅仅是一个值,你期望u
意味着什么呢?@Isaac:如果你有一个1487*18000数组,通过执行[c2][0]
从该数组中选择一个单元格,该单元格有多大?@Isaac:好的,如果u
只有一个值,您将如何从中提取18000个值?这里没有18000个值,只有1个。@Isaac:好的,我想我可能已经知道你缺少什么了。让我写一个答案。然而,你真的需要把人们问你的问题的所有答案都放在问题中,而不是评论中。解释这些变量是什么,它们有什么形状,以及你是如何知道的,这个问题是有意义的。如果没有这些,就没有办法回答任何问题。非常感谢abarnert,现在我可以找出问题所在了。我再次感谢你的帮助和耐心。