How to make a loop that writes in a new vector only values that meet a condition?

2 visualizaciones (últimos 30 días)
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];

Respuesta aceptada

James Tursa
James Tursa el 24 de En. de 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 comentarios
James Tursa
James Tursa el 24 de En. de 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.
Tsvetan Yorov
Tsvetan Yorov el 25 de En. de 2020
Thank you for the detailed explanation! It makes sense now.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Startup and Shutdown en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by