Vectorize "for"-loop in multidimentional array

1 view (last 30 days)
Zhakshylyk Nurlanov
Zhakshylyk Nurlanov on 16 Nov 2020
Answered: Steve Eddins on 16 Nov 2020
I would like to vectorize the following for-loop. Is it possible and how?
Y = ones(n, L, L)
% size(x_i_left) = (n , 1)
for i=1:n
Y(i, 1:x_i_left(i), :) = 0;
Y(i, x_i_right(i):end, :) = 0;
Y(i, :, 1:x_j_left(i)) = 0;
Y(i, :, x_j_right(i):end) = 0;
end

Answers (1)

Steve Eddins
Steve Eddins on 16 Nov 2020
It is conceivable that the loop might be eliminated with some sub2ind calculations followed by linear indexing, but I would expect that to be slower and take more more memory than the loop you have written. Why do you want to eliminate the loop?
If I understand your code correctly, then I think it could be simplified to something like this:
Y = zeros(n,L,L);
for i = 1:n
Y(i, (x_i_left(i)+1):(x_i_right(i)-1), (x_j_left(i)+1):(x_j_right(i)-1)) = 1;
end
I expect that this would execute faster.

Community Treasure Hunt

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

Start Hunting!

Translated by