Python 索引器错误:双精度';对于';陈述

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语句中重复使用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,现在我可以找出问题所在了。我再次感谢你的帮助和耐心。