Compare Row & only keep the highest value

조회 수: 1(최근 30일)
Aninda Maji
Aninda Maji 2021년 2월 3일
편집: Aninda Maji 2021년 2월 3일
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.

채택된 답변

Jan
Jan 2021년 2월 3일
편집: Jan 2021년 2월 3일
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
Aninda Maji
Aninda Maji 2021년 2월 3일
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?

댓글을 달려면 로그인하십시오.

추가 답변(0개)

Community Treasure Hunt

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

Start Hunting!

Translated by