relabel the elements in each column according to the magnitude of these elements in an array
조회 수: 1 (최근 30일)
이전 댓글 표시
Hi, I have
a=[4 5;
5 1;
6 4;
7 7]
I want to relabel the elements in each column according to the magnitude of these elements in the column to become
a=[1 3;
2 1;
3 2;
4 4]
How can I do this? Thank you.
댓글 수: 0
채택된 답변
Star Strider
2014년 6월 5일
편집: Star Strider
2014년 6월 5일
This works:
a=[4 5; 5 1;6 4; 7 7]
[as,ai] = sort(a,1);
b = [ai(ai(:,1),1) ai(ai(:,2),2)]
produces:
b =
1 3
2 1
3 2
4 4
It sorts the first and second columns independently. Then, to get the column indices as you want them, it maps each set of column indices to its own sorted indices. A bit complicated to explain, but taking the reference to the columns of b apart and looking at its components will reveal how it works.
댓글 수: 12
Star Strider
2014년 6월 7일
My pleasure!
It’s an unusual enough request that it took some time to come up with solution. When I was Answering another Question involving unique, it occurred to me that the unique function actually does exactly what you want.
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!