У меня есть этот код, который я написал в MATLAB для хранения матриц.Я использовал массив ячеек, но в Python я не знаю, как это сделать.
Кто-нибудь знает, как я могу это сделать?
Код MATLAB:
S =[0.5 0.7 0.9 1.1]; % distância entre tx e rx[m]
d = 0.2*ones(1,10);
h = [ 0 0.1 0.2 0.3 0.4]
n_cam = length(d); % numero de camadas
n_alt = length(h); % numero de alturas
n_S = length(S); % numero de receptores
z = zeros(n_cam,n_alt); % profundidade
Rv_h = zeros(n_S,n_alt);
Rv_v = zeros(n_S,n_alt);
Rv = zeros(n_cam,n_alt);
Rh = zeros(n_cam,n_alt);
S_Rv = cell(1,n_S);
S_Rh = cell(1,n_S);
sigma = 0.3*ones(1,n_cam);
sigmaah = zeros(n_S,n_alt);
for i = 1:n_S
for j = 1:n_alt
for k = 1:n_cam
z(k,j)= (sum(d(1:k))+h(j))/S(i);
Rv(k,j) = 1/((4*z(k,j)^2+1)^0.5);
Rh(k,j) = ((4*z(k,j)^2+1)^0.5)-2*z(k,j);
end
Rv_h(i,j) = 1/((4*(h(j)/S(i))^2+1)^0.5);
Rh_h(i,j)=((4*(h(j)/S(i))^2+1)^0.5)-2*(h(j)/S(i));
end
S_Rv(:,i) = {Rv}; % z para cada camada em cada altura, para cada S
S_Rh(:,i) = {Rh};
end
for i = 1:n_S
for j = 1:n_alt
Rv = cell2mat(S_Rv(1,i));
Rh = cell2mat(S_Rh(1,i));
sigma_ah = sigma(1)*(Rh_h(i,j)-Rh(1,j));
sigma_av = sigma(1)*(Rv_h(i,j)-Rv(1,j));
for k = 2:(n_cam-1)
sigma_ah_ant = sigma_ah;
sigma_av_ant = sigma_av;
sigma_ah = sigma_ah_ant + sigma(k)*(Rh(k-1,j)-Rh(k,j));
sigma_av = sigma_av_ant + sigma(k)*(Rv(k-1,j)-Rv(k,j));
end
sigmaah (i,j) = sigma_ah + sigma(end)*Rh(n_cam-1,j)
sigmaav (i,j) = sigma_av + sigma(end)*Rv(n_cam-1,j)
end
end
Я думал, что в Python я мог бы сделать что-то вроде:
n_S = 4
n_alt = 9
n_cam = 6
Rv =[]
for i in range(1,n_S):
for j in range(1,n_alt):
for k in range(1,n_cam):
z[k][j]= (sum(d[0:k])+h[j])/S[i]
Rv[i][j][k] = 1/((4*z[k,j]**2+1)**0.5)
Но это не работает, я получаю сообщение об ошибке «Список индексов вне диапазона».