Inverse of sorting arrangement

38 Ansichten (letzte 30 Tage)
Paolo Binetti
Paolo Binetti am 4 Okt. 2018
Kommentiert: Stephen23 am 27 Jun. 2023
[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)?

Akzeptierte Antwort

Stephen23
Stephen23 am 4 Okt. 2018
Bearbeitet: Stephen23 am 27 Jun. 2023
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 Kommentare
Mohamed Eldin
Mohamed Eldin am 27 Jun. 2023
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 am 27 Jun. 2023
@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));

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Matt J
Matt J am 4 Okt. 2018
Bearbeitet: Matt J am 4 Okt. 2018
[B,I] = sort(A);
J=1:numel(I);
J(I)=J;
  2 Kommentare
Robert
Robert am 28 Jul. 2020
Surprisingly, even this works:
[B,I] = sort(A);
J(I) = 1:numel(I);
Matt J
Matt J am 28 Jul. 2020
Yes, but it can have unintended effects if J is a pre-existing variable in the workspace.

Melden Sie sich an, um zu kommentieren.


Bruno Luong
Bruno Luong am 27 Jun. 2023
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 Kommentar
Bruno Luong
Bruno Luong am 27 Jun. 2023
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.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Shifting and Sorting Matrices finden Sie in Help Center und File Exchange

Tags

Produkte


Version

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by