Inverse of sorting arrangement
조회 수: 47 (최근 30일)
이전 댓글 표시
[B,I] = sort(A) output is such that B = A(I). What would be the most efficient way to rather get B and J, such that A = B(J)?
댓글 수: 0
채택된 답변
Stephen23
2018년 10월 4일
편집: Stephen23
2023년 6월 27일
Assuming that A is a vector:
[B,I] = sort(A);
[~,J] = sort(I);
B(J)
If you have a matrix/array, then you first need to define what the intended effect is: to sort elements along one dimension (e.g. separately sort each column or row of a matrix) or to sort the rows atomically (i.e. using SORTROWS).
댓글 수: 4
Mohamed Eldin
2023년 6월 27일
I used the command "sortrows" and it worked perfectly
as in the following example:
[Indata,id] = sortrows(InData,1); % sort InData
[~,ids] = sortrows(id,1); % sort the index
InData_returne = Indata(ids,:); % return InData again
Stephen23
2023년 6월 27일
@Mohamed Eldin: you do not need the 2nd SORTROWS, a simple SORT is quite sufficient:
[B,I] = sortrows(A,1);
[~,J] = sort(I);
A = B(J,:);
Also note that if you are only sorting one column instead of SORTROWS you could use indexing & SORT:
[B,I] = sort(A(:,1));
추가 답변 (2개)
Bruno Luong
2023년 6월 27일
If A has distinct elements such as
A = rand(1,10)
a single line command is
[B,~,J] = unique(A);
Check
J
B(J)
댓글 수: 1
Bruno Luong
2023년 6월 27일
If A has non distinct element, then the above method gives B that is shorter than A (and B has distinct elements) and
B(J) = A
still hold.
참고 항목
카테고리
Help Center 및 File Exchange에서 Shifting and Sorting Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!