Hello !
I am trying to vectorize this nested for loop but I cannot think of any solution.
L=zeros(4,200,3);
for i=1:3
for p=4:200
for q=1:4
L(q,p,i)=G(p-q+1,i);
end
end
end
What I tried (but doesnt work) :
L = zeros(4,200,3);
[p,q] = ndgrid([4:200],[1:4]);
p = p(:);
q = q(:);
L(q,p,:)=G(p-q+1,:);
Can someone please help me with what is wrong with my logic ?

 Risposta accettata

% random matrix G:
G = rand(200,3);
[r,m] = size(G);
% parameter:
n = 4;
% for loop method (generalized):
L=zeros(n,r,m);
for i=1:m
for p=n:r
for q=1:n
L(q,p,i)=G(p-q+1,i);
end
end
end
% vectorized method:
p = n:r;
q = 1:n;
idx = p(:).'-q(:)+1 + reshape(0:m-1,[1 1 m])*r;
L_vectorized = [zeros(n,n-1,m) G(idx)];
% check that the two methods give the same result:
isequal(L,L_vectorized)
ans = logical
1

Più risposte (0)

Categorie

Scopri di più su Loops and Conditional Statements in Centro assistenza e File Exchange

Prodotti

Richiesto:

il 9 Giu 2022

Risposto:

il 11 Giu 2022

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by