How to make a loop that writes in a new vector only values that meet a condition?
2 views (last 30 days)
Show older comments
Tsvetan Yorov
on 24 Jan 2020
Commented: Tsvetan Yorov
on 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 Comments
Accepted Answer
James Tursa
on 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 Comments
James Tursa
on 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.
More Answers (0)
See Also
Categories
Find more on Startup and Shutdown in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!