代码之家  ›  专栏  ›  技术社区  ›  Emily

将Matlab转换为python代码:索引器:索引-1超出大小为0的轴0的界限

  •  0
  • Emily  · 技术社区  · 2 年前

    将Matlab代码转换为python。索引器错误:索引-1超出大小为0的轴0的界限 Matlab ++++++

    for i = 1:N
                for j=1:N
                    s = zeros(L2,L2);
                    sX = zeros(L2,L2);
                    sSS= Y((i-1)*L2+1:i*L2,(j-1)*L2+1:j*L2);
                    BI{i,j} = sSS;
                    
    

    蟒蛇 ++++++

    for i in range(N):
            for j in range(N):
                s = zeros(N, N);
                sX = zeros(N,N);
                sSS =Y[arange(dot((i - 1),L2) + 1,dot(i,L2)),arange(dot((j - 1),L2) + 1,dot(j,L2))]
                BI [i,j] = sSS
               
    

    索引器错误:索引-1超出大小为0的轴0的界限。根据BI[i,j]=sSS的线。 matlab和python之间的索引差异。Matlab启动索引1,Python启动索引0。

    1 回复  |  直到 2 年前
        1
  •  1
  •   AboAmmar    2 年前

    MATLAB索引 (i-1)*L2+1:i*L2,(j-1)*L2+1:j*L2 简单地翻译成Python,如下所示 i*L2:(i+1)*L2, j*L2:(j+1)*L2 . 您应该初始化 BI 环路外和 s , sX 在循环内不执行任何操作。而且 Y 未在循环外部定义。

    注意,您不应该像这样从numpy导入所有内容,它应该是 import numpy as np 和使用 np.func(..) 无论你想去哪里。 BI公司 定义为更接近 单元阵列 在MATLAB中。

    from numpy import *    # not recommended to import everything
    
    N = L2 = 5
    Y = random.rand(100,100)
    BI = []
    for i in range(N):
        BI.append([])
        for j in range(N):
            # s = zeros((L2,L2))  # does nothing
            # sX = zeros((L2,L2)) # does nothing
            sSS = Y[i*L2:(i+1)*L2, j*L2:(j+1)*L2]
            BI[i].append(sSS)