필터 지우기
필터 지우기

Inverse of sorting arrangement

조회 수: 47 (최근 30일)
Paolo Binetti
Paolo Binetti 2018년 10월 4일
댓글: Stephen23 2023년 6월 27일
[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)?

채택된 답변

Stephen23
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
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
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개)

Matt J
Matt J 2018년 10월 4일
편집: Matt J 2018년 10월 4일
[B,I] = sort(A);
J=1:numel(I);
J(I)=J;
  댓글 수: 2
Robert
Robert 2020년 7월 28일
Surprisingly, even this works:
[B,I] = sort(A);
J(I) = 1:numel(I);
Matt J
Matt J 2020년 7월 28일
Yes, but it can have unintended effects if J is a pre-existing variable in the workspace.

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


Bruno Luong
Bruno Luong 2023년 6월 27일
If A has distinct elements such as
A = rand(1,10)
A = 1×10
0.0113 0.2350 0.1021 0.4269 0.9673 0.4399 0.3871 0.0288 0.5912 0.1876
a single line command is
[B,~,J] = unique(A);
Check
J
J = 10×1
1 5 3 7 10 8 6 2 9 4
B(J)
ans = 1×10
0.0113 0.2350 0.1021 0.4269 0.9673 0.4399 0.3871 0.0288 0.5912 0.1876
  댓글 수: 1
Bruno Luong
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 CenterFile Exchange에서 Shifting and Sorting Matrices에 대해 자세히 알아보기

태그

제품


릴리스

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by