IndexError:对于'的标量变量的无效索引。声明

时间:2014-09-11 04:57:47

标签: 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 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中尝试了一些解决方案,但它没有用。

请您提出一些想法或帮助吗?

非常感谢。

谢谢,

艾萨克

1 个答案:

答案 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用于两个不相关的事情。将其中一个重命名为其他内容。

更一般地说,解决方案是不使用无意义的单字母变量名称,因为当你这样做时,很难避免意外地重复使用它,并且很难分辨你何时这样做。