Todas,
Cuando tiene una matriz y le gustaría ordenar la matriz, actualmente no conozco una función que me permita ordenar la matriz sin usar un bucle sobre las columnas o filas. No creo que esto sea particularmente eficaz. Además, no existe una forma sencilla de conservar las posiciones una vez que se realiza la clasificación. Consulte la siguiente discusión para obtener más detalles:
https://community.jmp.com/t5/Discussions/Sort-a-matrix/mp/85678#M38246
Como verá en la discusión, @markbailey tuvo la amabilidad de ofrecer una función personalizada simple, que creo que es útil tener en el arsenal de JMP.
La función que @markbailey proporcionado se muestra a continuación por conveniencia.
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 );También me tomé la libertad de agregar un poco más en la misma línea, para hacerlo más generalizado que mi necesidad limitada:
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 } );
);
);
);