Vectorization of a for loop

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

Answers (2)

v = 1:length(P)-2;
ix = find( ((P(v+1) - P(v)) > 0) & ((P(v+2) - P(v+1)) < 0) ) + 1;
B2(ix) = 1;

1 Comment

Hello Peter,
Thanks for your answer, but that code doesn't give the same results as the for above

Sign in to comment.

Guillaume
Guillaume on 10 Nov 2015
Edited: Guillaume on 10 Nov 2015
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

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Asked:

on 9 Nov 2015

Edited:

on 10 Nov 2015

Community Treasure Hunt

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

Start Hunting!