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

Réponses (2)

Peter O
Peter O le 9 Nov 2015

0 votes

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 commentaire

jpedro
jpedro le 10 Nov 2015
Hello Peter,
Thanks for your answer, but that code doesn't give the same results as the for above

Connectez-vous pour commenter.

Guillaume
Guillaume le 10 Nov 2015
Modifié(e) : Guillaume le 10 Nov 2015

0 votes

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

Catégories

En savoir plus sur Loops and Conditional Statements dans Centre d'aide et File Exchange

Question posée :

le 9 Nov 2015

Modifié(e) :

le 10 Nov 2015

Community Treasure Hunt

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

Start Hunting!

Translated by