Ich bin daran interessiert, die Spalten einer Matrix in Bezug auf die Werte in zwei anderen Vektoren zu sortieren. Als Beispiel nehmen wir an, dass die Matrix und Vektoren wie folgt aussehen:
%Vor% Ich möchte die Spalten von A
in Bezug auf ihre entsprechenden Werte in v1
und v2
sortieren, wobei v1
Vorrang vor v2
hat. Außerdem bin ich daran interessiert, die Matrix an Ort und Stelle zu sortieren , da die Matrizen, mit denen ich arbeite, sehr groß sind. Derzeit sieht meine rohe Lösung so aus:
was zum gewünschten Ergebnis führt:
%Vor%Offensichtlich ist mein Ansatz nicht ideal, da er das Berechnen und Speichern von Zwischenmatrizen erfordert. Gibt es einen effizienteren / eleganteren Ansatz zum Sortieren der Spalten einer Matrix in Bezug auf zwei andere Vektoren? Und kann es an Ort und Stelle getan werden, um Speicher zu sparen?
Vorher habe ich sortperm
verwendet, um ein Array nach den Werten zu sortieren, die in einem anderen Vektor gespeichert sind. Ist es möglich, sortperm
mit 2 Vektoren (und in-place) zu verwenden?
Ich würde es wahrscheinlich so machen:
%Vor% Dies sollte ziemlich schnell sein und verwendet nur einen temporären Vektor und eine Kopie der Matrix. Es ist nicht vollständig an Ort und Stelle, aber es ist nicht leicht, diese Operation vollständig durchzuführen. Sie benötigen eine Sortierfunktion, mit der Spalten verschoben werden, oder eine Version von permute!
, die für Spalten verwendet wird. Sie könnten mit dem Code für permute!!
in kombinatorics.jl beginnen und ihn ändern, um Spalten zu vervielfältigen, indem Sie einen einzelnen temporären Puffer in Spaltengröße wiederverwenden.
Tags und Links arrays sorting matrix julia-lang