Vectorize "for"-loop in multidimentional array

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

답변 (1개)

Steve Eddins
Steve Eddins 2020년 11월 16일

0 개 추천

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.

카테고리

도움말 센터File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

질문:

2020년 11월 16일

답변:

2020년 11월 16일

Community Treasure Hunt

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

Start Hunting!

Translated by