索引错误:双重'for'语句的无效索引

2 投票
1 回答
21049 浏览
提问于 2025-04-21 00:55

我的目的是通过在一个循环里面再放一个循环,来重复计算某个变量的列表。

我的代码如下。

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 用在两个无关的东西上。把其中一个改成其他的名字。

更一般来说,解决办法是不要使用没有意义的单字母变量名,因为这样很容易不小心重用一个名字,也很难发现自己已经重用了。

撰写回答