Tout,
Lorsque vous avez une matrice et que vous souhaitez trier la matrice, je ne suis actuellement pas au courant d'une fonction qui me permettrait de trier la matrice sans utiliser de boucle sur les colonnes ou les lignes. Je ne pense pas que ce soit particulièrement efficace. De plus, il n'y a pas de moyen simple de conserver les positions une fois le tri effectué. Veuillez consulter la discussion suivante pour plus de détails:
https://community.jmp.com/t5/Discussions/Sort-a-matrix/mp/85678#M38246
Comme vous le verrez dans la discussion, @markbailey a eu la gentillesse de proposer une fonction personnalisée simple, ce que je pense utile d'avoir dans l'arsenal JMP.
La fonction qui @markbailey fourni est illustré ci-dessous pour convenance.
A = [10 -12 4 8; 6 -9 8 0; 2 3 11 -2; 1 1 9 3];
sort matrix = Function( { m }, { t, b=[], i=[] },
For( j = 1, j <= N Cols( m ), j++,
t = A[0,j];
b ||= Sort Descending( t );
i ||= Matrix( Reverse( As List( Rank Index( t ) ) ) );
);
Eval List( { b, i } );
);
{ B, I } = sort matrix( A );
Show( A, B, I );J'ai également pris la liberté d'en ajouter un peu plus dans le même sens, afin de le rendre plus généralisé que mon besoin limité:
sort matrix = Function( { m,order }, { t, b=[], i=[] },
If(order == "ascending",
For( r = 1, r <= N Cols( m ), r++,
t = A[0,r];
b ||= Sort Ascending( t );
i ||= Matrix( As List( Rank Index( t ) ) );
);
Eval List( { b, i } );
,
// else
If(order == "descending",
For( r = 1, r <= N Cols( m ), r++,
t = A[0,r];
b ||= Sort Descending( t );
a i ||= Matrix(Reverse(As List( Rank Index( t ) )) );
);
Eval List( { b, i } );
);
);
);