Reputation: 33
Converting Matlab code to python . IndexError: index -1 is out of bounds for axis 0 with size 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;
Python ++++++
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
IndexError: index -1 is out of bounds for axis 0 with size 0. According to the line of BI [i,j] = sSS. The index difference between matlab and python. Matlab starts index 1 and Python starts index 0.
Upvotes: 2
Views: 157
Reputation: 5559
MATLAB indices (i-1)*L2+1:i*L2,(j-1)*L2+1:j*L2
are simply translated into Python's as this i*L2:(i+1)*L2, j*L2:(j+1)*L2
. You should initialize BI
outside the loops and s
, sX
does nothing inside the loops. Also, Y
is not defined outside the loops.
Note, you shouldn't import everything from numpy like this, it should be import numpy as np
and use np.func(..)
wherever you want. BI
was defined as a list which is closer to a cell array in 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)
Upvotes: 1