MATLAB Answers

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

12 views (last 30 days)
Tsvetan Yorov on 24 Jan 2020 at 17:20
Commented: Tsvetan Yorov on 25 Jan 2020 at 16:58
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

Sign in to comment.

Accepted Answer

James Tursa on 24 Jan 2020 at 17:31
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

Tsvetan Yorov on 24 Jan 2020 at 18:11
I am not very sure what that did but it worked out ;}
James Tursa on 24 Jan 2020 at 21:20
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 on 25 Jan 2020 at 16:58
Thank you for the detailed explanation! It makes sense now.

Sign in to comment.

More Answers (0)

Sign in to answer this question.