How to vectorize this code to eliminate nested For loops

조회 수: 1 (최근 30일)
Jae Min Lee
Jae Min Lee 2018년 9월 4일
댓글: Jae Min Lee 2018년 9월 4일
Would like to know how this code be vectorized:
for y=1:rows
for x=1:cols
if (segMat(y,x) == 255)
Energy(y,x) = Energy(y,x) + motionMap(y,x);
end
end
for y=1:rows
for x=1:cols
delta(y,x) = kronDel(255, segMat(y,x));
end
end
The kronDel function acts like the Kronecker delta.
  댓글 수: 2
Rik
Rik 2018년 9월 4일
Is segMat a function or an array? The second set of loops could be replaced with a call to arrayfun, but this is not always a speed improvement.
Jae Min Lee
Jae Min Lee 2018년 9월 4일
편집: Jae Min Lee 2018년 9월 4일
segMat is an image array.

댓글을 달려면 로그인하십시오.

채택된 답변

Walter Roberson
Walter Roberson 2018년 9월 4일
편집: Walter Roberson 2018년 9월 4일
Assuming that motionMap is an array and not a function,
%no loop needed
mask = segMat == 255;
Energy(mask) = Energy(mask) + motionMap(mask);
After which you can have the second nested loop calling kronDel
kronDel looks more likely to be a function than an array, so it is difficult to know if we could vectorize that section.
I speculate that your kronDel function returns the first parameter if the second parameter is 0, and otherwise returns 0. If my speculation is correct, then the loops and call could be replaced by
delta = 255 .* (segMat == 0);

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by