Inverse of sorting arrangement
34 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
[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 Commenti
Risposta accettata
Stephen23
il 4 Ott 2018
Modificato: Stephen23
il 27 Giu 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 Commenti
Mohamed Eldin
il 27 Giu 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
il 27 Giu 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));
Più risposte (2)
Matt J
il 4 Ott 2018
Modificato: Matt J
il 4 Ott 2018
[B,I] = sort(A);
J=1:numel(I);
J(I)=J;
Bruno Luong
il 27 Giu 2023
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 Commento
Bruno Luong
il 27 Giu 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.
Vedere anche
Categorie
Scopri di più su Matrix Indexing in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!