How to sort the matrix rows based on a function over the rows
Afficher commentaires plus anciens
Let's say I have a Nx3 matrix M of double.
Consider, for example, a function Map(a,b,c) that returns a double
How can I sort M so that the rows with smallest Map come first?
For example, the first row should be i if Map(M(i,1), M(i,2), M(i,3)) value is the smallest between Map(M(j,1), M(j,2), M(j,3)) for any 1 ≤ j ≤ N and j ≠ i
Réponses (2)
Jos (10584)
le 13 Déc 2017
I have no clue what a,b and c are but I assume the function Map(a,b,c) will return a vector of N elements:
X = Map(a,b,c)
[sortX, idx] = sort(X) % sort X, retrieve the sorting indices
sortedM = M(idx,:) % sort M accordingly
6 commentaires
Daniel Tex
le 13 Déc 2017
Modifié(e) : Daniel Tex
le 13 Déc 2017
Jos (10584)
le 13 Déc 2017
Does Map allow vectors?
X = Map(M(:,1),M(:,2),M(:,3))
if not:
X = arrayfun(@(r) Map(M(r,1),M(r,2), M(r,3)), 1:size(M,1))
Daniel Tex
le 13 Déc 2017
Modifié(e) : Daniel Tex
le 13 Déc 2017
Jos (10584)
le 13 Déc 2017
Did you try to run the arrayfun line on your matrix M as above? What does it return?
Retrieving the indices of a sort and use it to re-order another array is a classic trick ...
Daniel Tex
le 13 Déc 2017
Modifié(e) : Daniel Tex
le 13 Déc 2017
Jos (10584)
le 14 Déc 2017
so, then it should work ... or am I missing something?
Andrei Bobrov
le 14 Déc 2017
[~ii] = = sort(arrayfun(@(r) Map(M(r,:)), 1:size(M,1)));
out = M(ii,:);
Catégories
En savoir plus sur Shifting and Sorting Matrices dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!