Vectorization of a for loop
조회 수: 2 (최근 30일)
이전 댓글 표시
Hello,
I am trying to eliminate the loop and vectorise this piece of code. Any ideas?
for k = 1:(length(P)-2)
if ((P(k+1)-P(k)>0)&&(P(k+2)-P(k+1)<0));
B(k+1) = 1;
end
end
Thanks
댓글 수: 0
답변 (2개)
Peter O
2015년 11월 9일
v = 1:length(P)-2;
ix = find( ((P(v+1) - P(v)) > 0) & ((P(v+2) - P(v+1)) < 0) ) + 1;
B2(ix) = 1;
Guillaume
2015년 11월 10일
편집: Guillaume
2015년 11월 10일
Well, P(k+1)-P(k) can be obtained in a vectorised way with the diff function, so, assuming that by default B(k) is zero:
B = diff(P(1:end-1)) > 0 & diff(P(2:end)) < 0 %no need to preinitialise B
If by default, B(k) is something else:
B(diff(P(1:end-1)) > 0 & diff(P(2:end)) < 0) = 1; %B must be preinitialised
댓글 수: 0
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!