Compare Row & only keep the highest value

1 view (last 30 days)
I have a matrix like this:
A:
100 0.35
200 0.37
300 0.42
400 0.40
500 0.39
600 0.46
I want the output like this:
B:
100 0.35
200 0.37
300 0.42
400 0.42
500 0.42
600 0.46
I.e. what I need is in the second column compare each row against previouos row. In case current row is higher than the previous row then keep it but if the previous row is higher then copy the prvious row in the current row.
I am aware that I can do it via a for loop. But is there any way to do it a more clean way through matrix operation?
Many thanks in advance for your help.

Accepted Answer

Jan
Jan on 3 Feb 2021
Edited: Jan on 3 Feb 2021
A = [100, 0.35; ...
200, 0.37; ...
300, 0.42; ...
400, 0.40; ...
500, 0.39; ...
600, 0.46];
B = [A(:, 1), cummax(A(:, 2))]
Or in your case:
B = cummax(A, 1) % Along 1st dimension
  1 Comment
Aninda Maji
Aninda Maji on 3 Feb 2021
Edited: Aninda Maji on 3 Feb 2021
Super this works as expected,
Now I have the matrix like this:
A =
[100 0.35;
200 0.38;
300 0.40;
400 0.40;
500 0.42;
600 0.42;
700 0.42;
800 0.48];
B =
[100 0.35;
200 0.38;
300 0.40;
400 0.41;
500 0.42;
600 0.44;
700 0.46;
800 0.48];
So what this B does is it check the data points to calculate where we have same values there it evenly distributes between the 2 points. so for 400 data becomes to 0.41 (0.40+(0.42 - .40/2)) and for 600, 700 data becomes 0.44 and 0.46 respectively (0.42+((.48-.42)/3)*1) & (0.42+((.48-.42)/3)*2).
Is there any simple of way of doing it?

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!