speed up the code
조회 수: 1 (최근 30일)
이전 댓글 표시
hi everyone.
can you help me speed up this code?
tic
InputOverlap = magic(64)
SDR_Overlap = InputOverlap;
SDR = (zeros (64,64)) ;
Radius = 2;
InputOverlap = [InputOverlap(:,1:Radius) InputOverlap InputOverlap(:,end+1-Radius:end)];
InputOverlap = [InputOverlap(1:Radius,:) ; InputOverlap ; InputOverlap(end+1-Radius:end,:) ];
for r=1:64
for c=1:64
Neighbour= InputOverlap(r:r+2*Radius,c:c+2*Radius);
Kmax = max(Neighbour(:)) ;
if (SDR_Overlap(r,c)>0)&(SDR_Overlap(r,c)>= Kmax)
SDR(r,c) = 1;
else
SDR(r,c) = 0;
end
end
end
toc
Thanks.
댓글 수: 2
Jan
2018년 7월 23일
편집: Jan
2018년 7월 23일
Start with omitting:
else
SDR(r,c) = 0;
SDR is initialized to zero already.
The editor should show a hint that && is more efficient than &. Consider these MLint messages.
The main part of your code happens before the loop. Most of all displaying the magic matrix is slow. I guess, you want to measure the time inside the loop only, don't you?
채택된 답변
Jan
2018년 7월 23일
This is slightly faster:
tic
for r = 1:64
for c = 1:64
Neighbour = InputOverlap(r:r+2*Radius, c:c+2*Radius);
Kmax = max(Neighbour(:));
SDR(r,c) = (SDR_Overlap(r,c) >= Kmax);
end
end
toc
Is the SDR_Overlap(r,c)>0 test useful?
댓글 수: 2
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Logical에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!