How to simplify the for loop for 3D matrix?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Kalasagarreddi Kottakota
am 11 Jan. 2023
Kommentiert: Bruno Luong
am 11 Jan. 2023
I have the following code, where I am looking to eliminate only the outer for-loop (k) and include 'k' inside the inner loop. Here, I perform inverse considering each calculation point (k=1:NFocP) in a loop, but would like to some how eliminate outer loop and perform the inverse for all points at one instance. And the other concern is that I don't want to disturb the mldivide (\) function. Is there any way to solve this issue?
clear all;
load A.mat
load s1.mat
load s2.mat
Foc = size(s1,3); % no of calculation points
Nt = size(s1,2); % length of signal
M = size(s1,1); % no of rsensors
for k=1:Foc
for p = 1:Nt
H = [s1(:,p,k) s2(:,p,k)];
tmp = H\ A(:,p);
Ainv1(k,p) = tmp(1);
Ainv2(k,p) = tmp(2);
end
end
2 Kommentare
Akzeptierte Antwort
Bruno Luong
am 11 Jan. 2023
Bearbeitet: Bruno Luong
am 11 Jan. 2023
load('A.mat');
load('s1.mat');
load('s2.mat');
[m,n,p] = size(s1);
% s = [reshape(s1, [m,1,n,p]), reshape(s2, [m,1,n,p])];
% Ar = reshape(A,m,1,[]);
% C=pagemldivide(s,Ar);
% Ainv1=reshape(C(1,:,:),n,p).';
% Ainv2=reshape(C(2,:,:),n,p).';
s = reshape([s1;s2], [m,2,n,p]);
Ainv1 = zeros(p,n);
Ainv2 = zeros(p,n);
for i=1:n
C=pagemldivide(s(:,:,i,:),A(:,i));
Ainv1(:,i)=C(1,:);
Ainv2(:,i)=C(2,:);
end
4 Kommentare
Bruno Luong
am 11 Jan. 2023
You might try this that requires the FEX
https://fr.mathworks.com/matlabcentral/fileexchange/27762-small-size-linear-solver#functions_tab
[m,n,p] = size(s1);
s = reshape([s1;s2], [m,2,n,p]);
Ainv1 = zeros(p,n);
Ainv2 = zeros(p,n);
Ar = reshape(A,m,1,[]);
scs = pagemtimes(s,'ctranspose',s,'none');
scA = pagemtimes(s,'ctranspose',Ar,'none');
for i=1:n
scsi = reshape(scs(:,:,i,:),2,2,[]);
scAi = reshape(scA(:,:,i,:),2,1,[]);
C = inv2(scsi, scAi); % https://fr.mathworks.com/matlabcentral/fileexchange/27762-small-size-linear-solver#functions_tab
Ainv1(:,i)=C(1,:);
Ainv2(:,i)=C(2,:);
end
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!