Vectorization of nested for loop

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 ?

 Accepted Answer

% 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

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Products

Asked:

on 9 Jun 2022

Answered:

on 11 Jun 2022

Community Treasure Hunt

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

Start Hunting!