How to make a loop that writes in a new vector only values that meet a condition?
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Tsvetan Yorov
le 24 Jan 2020
Commenté : Tsvetan Yorov
le 25 Jan 2020
I'm trying to make some kind of data filter that goes through a vector, compares every value with the previous one and writes the value in a new vector only if it is bigger than the previous one.
VPo=[0 0 0 0 1 0 2 3 4 0 5 4 3 0 2 1 0 0 0 0];
I wrote this simple loop:
[row, column]=find (VPo == max(VPo));
for i=2:row
if VPo (i,1) >= VPo (i-1,1)
VPoF(i) = VPo(i,1);
end
end
The problem is that it writes all the values from VPo to VPoF until max(VPo) and doesn't do anything:
VPoF = VPo=[0 0 0 0 1 0 2 3 4 0 5];
0 commentaires
Réponse acceptée
James Tursa
le 24 Jan 2020
Assuming you don't want the first value since there is no previous value to compare to:
x = [false, diff(VPo) > 0];
VPoF = VPo(x);
If you do want that first value, change the false to true.
3 commentaires
James Tursa
le 24 Jan 2020
The diff( ) function calculates the difference between successive elements. The expression above simply looks for when this is positive (indicating the value increased) as a logical result. Then this is used as a logical index into VPo to extract your result.
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Startup and Shutdown dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!