繁体   English   中英

对于大小为 5 的轴 0,索引 5 超出范围,如何解决?

[英]index 5 is out of bounds for axis 0 with size 5, how to solve it?

我是 python 的初学者,并试图编写代码来确定导纳矩阵。 我的准入名单被定义为 Y_ges

Y_ges = [ 9.89583333-40.47448077j  27.9209622 -10.73883162j
         27.9209622 -10.73883162j  27.9209622 -10.73883162j
         27.9209622 -10.73883162j]

一开始我创建了一个零矩阵并确定了它的大小。

a=np.zeros((len(net.bus),len(net.bus)),dtype=complex)

然后我创建了一个 function 来逐行填充矩阵

def fillmatrix(n):
    for i in range(len(n)):
        #print(i)
        if i == 0 :
            zerolist=[0]*len(net.bus)
            print("we are in if loop",i)
            zerolist[i]=Y_ges[i]
            zerolist[i+1]=-Y_ges[i]
            a[i]=zerolist
            #print(zerolist)
            #print(a)
        else:
            print("we are in else loop",i)
            zerolist=[0]*len(net.bus)
            zerolist[i-1]=-Y_ges[i-1]
            zerolist[i]=Y_ges[i-1]+Y_ges[i+1]
            zerolist[i+1]=-Y_ges[i+1]
            a[i]=zerolist
            i+=1
            print(a)
            print("i =",i)
            #print(zerolist)
     
            

fillmatrix(Y_ges)  

我希望这个矩阵

[[  9.89583333-40.47448077j  -9.89583333+40.47448077j
    0.         +0.j           0.         +0.j
    0.         +0.j           0.         +0.j        ]
 [ -9.89583333+40.47448077j  37.81679553-51.21331239j
  -27.9209622 +10.73883162j   0.         +0.j
    0.         +0.j           0.         +0.j        ]
 [  0.         +0.j         -27.9209622 +10.73883162j
   55.8419244 -21.47766323j -27.9209622 +10.73883162j
    0.         +0.j           0.         +0.j        ]
 [  0.         +0.j           0.         +0.j
  -27.9209622 +10.73883162j  55.8419244 -21.47766323j
  -27.9209622 +10.73883162j   0.         +0.j        ]
 [  0.         +0.j           0.         +0.j
    0.         +0.j         -27.9209622 +10.73883162j
  55.8419244 -21.47766323j  -27.9209622 +10.73883162j]
 [  0.         +0.j           0.         +0.j
    0.         +0.j           0.         +0.j
 -27.9209622 +10.73883162j  27.9209622 +10.73883162j]]

但我得到了这个矩阵


[[  9.89583333-40.47448077j  -9.89583333+40.47448077j
    0.         +0.j           0.         +0.j
    0.         +0.j           0.         +0.j        ]
 [ -9.89583333+40.47448077j  37.81679553-51.21331239j
  -27.9209622 +10.73883162j   0.         +0.j
    0.         +0.j           0.         +0.j        ]
 [  0.         +0.j         -27.9209622 +10.73883162j
   55.8419244 -21.47766323j -27.9209622 +10.73883162j
    0.         +0.j           0.         +0.j        ]
 [  0.         +0.j           0.         +0.j
  -27.9209622 +10.73883162j  55.8419244 -21.47766323j
  -27.9209622 +10.73883162j   0.         +0.j        ]
 [  0.         +0.j           0.         +0.j
    0.         +0.j           0.         +0.j
    0.         +0.j           0.         +0.j        ]
 [  0.         +0.j           0.         +0.j
    0.         +0.j           0.         +0.j
    0.         +0.j           0.         +0.j        ]]


和这个错误信息:


 File "/Users/pythonuser/Desktop/Probe code ", line 230, in <module>
   fillmatrix(Y_ges)

 File "/Users/pythonuser/Desktop/Probe code ", line 220, in fillmatrix
   zerolist[i]=Y_ges[i-1]+Y_ges[i+1]

IndexError: index 5 is out of bounds for axis 0 with size 5 

任何想法?

Numpy arrays 是零索引的。 它从索引 0 开始,到索引 len-1 处的最后一个元素结束。 您不应该在循环中修改 i 。

我已阅读您的代码并了解您想要一个对角矩阵,所以这里是代码:

def fillmatrix(n):
    zeros = np.zeros((len(n)+1, len(n)+3), dtype=n.dtype)
    p = np.pad(n, 1) # padding simplifies the logic, no ifs
    for i in range(len(n)+1):
       zeros[i, i:i+3] = [-p[i], p[i]+p[i+1], -p[i+1]]
    return zeros[:, 1:-1]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM