Alles,
Dies ist eine Folgefrage an https://community.jmp.com/t5/Discussions/Sort-a-matrix/mp/85678#M38246 .
sort_matrix = Function( {m, order = "ascending"}, {t, b = [], i = [], default local},
If( order == "ascending" | order == "Ascending",
For( r = 1, r <= N Cols( m ), r++,
t = m[0, r];
b ||= Sort Ascending( t );
i ||= Matrix( As List( Rank Index( t ) ) );
);
Eval List( {b, i} );
,
// else
If( order == "descending" | order == "Descending",
For( r = 1, r <= N Cols( m ), r++,
t = m[0, r];
b ||= Sort Descending( t );
i ||= Matrix( Reverse( As List( Rank Index( t ) ) ) );
);
Eval List( {b, i} );
)
);
);
Die aktuelle Implementierung dieser Funktion löst also willkürlich Beziehungen auf. Ich möchte mit Bindungen umgehen, indem die Reihenfolge der Elemente erhalten bleibt. Für zB
A = [1 0 1];
{b,i} = sort_matrix(A);
b=
0 1 1
i=
2 1 3Ich hatte gehofft, dass die Platzierung der Rangliste () anstelle des Rank-Index oben und die Neuzuordnung der Positionen dazu beitragen würde, das Problem für mich zu lösen. Bei mehr als zwei Verknüpfungen öffnet die Rangfolge Tie () jedoch ein anderes Problem, dh sie liefert ein anderes Ergebnis, je nachdem, ob die Eingabe eine gerade Anzahl von Suplikaten oder eine ungerade Anzahl von Duplikaten aufweist. Irgendwelche Gedanken?
@adammorris .
Vielen Dank, dass Sie die Lösung anbieten. Adam half mir über die JMP Technical Support-Plattform und hier ist die Antwort für alle, die neugierig sind.
Clear Log(); Clear Globals();
/*A = [10 -12 4 8; 6 -9 8 0; 2 3 11 -2; 1 1 9 3];*/
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 );
i ||= Matrix(As List( Rank Index( -t ) )) ;
);
Eval List( { b, i } );
);
);
);