필터 지우기
필터 지우기

Please help with using accumarray to choose the max value of the array

조회 수: 1 (최근 30일)
I have a matrix, for an example with 11 x 3.
CH BA OL
10.0000 10.0000 0.6000
10.0000 11.0000 0.4000
11.0000 9.0000 0.6000
11.0000 10.0000 0.2000
11.0000 11.0000 0.2000
25.0000 44.0000 0.1000
25.0000 9.0000 0.7000
25.0000 45.0000 0.2000
27.0000 44.0000 0.2000
27.0000 46.0000 0.3000
27.0000 9.0000 0.5000
I'm trying to take unique values for column CH, and each unique value in CH should sort the maximum value's BA. For example, final results should be like
CH BA OL
10 10 0.6
11 9 0.6
25 9 0.7
27 46 0.5
I was trying accumarray but I couldnt get the correct answer. Please help
  댓글 수: 4
Ameer Hamza
Ameer Hamza 2020년 3월 18일
In that case, last row should be 27 9 0.5

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

답변 (2개)

Mohammad Sami
Mohammad Sami 2020년 3월 18일
% matrix = 11 x 3
ch = matrix(:,1);
[u,~,ic] = unique(ch);
maxba = accumarray(ic,matrix(:,2),[],@max);
out = [u maxba];
i = ismember(matrix(:,1:2),out,'rows');
out = matrix(i,:);
  댓글 수: 1
Hashini Wanniarachchi
Hashini Wanniarachchi 2020년 3월 18일
Thank you so much for guidance. Well I wanted to sort through col 3. I sorted it out anyhow following this. Thanks again!

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


Ameer Hamza
Ameer Hamza 2020년 3월 18일
편집: Ameer Hamza 2020년 3월 18일
Try this
M = [10.0000 10.0000 0.6000
10.0000 11.0000 0.4000
11.0000 9.0000 0.6000
11.0000 10.0000 0.2000
11.0000 11.0000 0.2000
25.0000 44.0000 0.1000
25.0000 9.0000 0.7000
25.0000 45.0000 0.2000
27.0000 44.0000 0.2000
27.0000 46.0000 0.3000
27.0000 9.0000 0.5000];
[~,idx] = sort(M(:,3));
M = M(idx,:);
[~,idx] = sort(M(:,1));
M = M(idx,:);
result = splitapply(@(x) x(end,:), M, findgroups(M(:,1)));

카테고리

Help CenterFile Exchange에서 Other Formats에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by