我的循环中不断出现错误“索引2超出大小为2的轴0的界限”

2024-06-02 05:12:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我基本上是想在这里求一个梯度的和,看看我附上的截图,有更好的想法。Rho是一个nx1输入向量,我附上的屏幕截图显示了3x1 Rho向量的想法,但它确实有一个未定义的长度。你知道吗

enter image description hereenter image description here

# JACOBIAN 

def derivative(rho, a, A, tilde_k, x, y, vecinc, chi):
    n = rho.shape[0]
    result1 = np.array([n,1],complex)
    result2 = np.array([n,1],complex)
    result = np.array([n,1],complex)
    u = np.zeros((n, 3))
    W_tilde = np.array([3,3],complex)

    loop1 = 0
    loop2 = 0
    for i in range(n):
        for j in range(n):
            u[i] = x[i] - y[j] # n x 3
            W_tilde = A_matrix * chi.imag * A_matrix * G(u[i],k) * A_matrix # 3 x 3

            ei_block = np.exp(1j * np.vdot(x[i], tilde_k)) * vecinc # 3 x 1
            ej_block = np.exp(1j * np.vdot(x[j], tilde_k)) * vecinc # 3 x 1
            eiT_block = np.matrix.getH(ei_block) # 1 x 3
            mm = np.matmul(W_tilde, ej_block) # (3 x 3)(3 x 1) = 3 x 1
            alpha_tilde = np.dot(eiT_block, mm) # (1 x 3)(3 x 1) = 1 x 1 = scalar

            loop1 = loop1 + (2 * rho[i] * alpha_tilde * rho[j]) # scalar 

            if (i != j):  
                loop2 = loop2 + ((rho[j]**2) * alpha_tilde) # scalar
        result1[i] = loop1 
        result2[i] = loop2

    result = result1 + result2 # (n x 1) + (n x 1) = n x 1 vector

    return result

对于该行,result1[I]=loop1,我得到“indexeror:index 2超出了大小为2的轴0的界限”。请帮忙:(


Tags: alphanpresultblockarraymatrixscalarrho
1条回答
网友
1楼 · 发布于 2024-06-02 05:12:59

该错误意味着您正试图访问只有两个元素(大小2)的数组的第三个元素(索引2)。你知道吗

看起来你在用一种有趣的方式定义数组;np.array([n,1],complex)创建一个长度为2的数组,而不是n的数组。你想要的可能是np.zeros(n,complex),它将创建一个填充0的n长度数组

相关问题 更多 >