Ich möchte eine dichte quadratische Übergangsmatrix direkt ändern, indem ich die Reihenfolge mehrerer Zeilen und Spalten mithilfe der Numpy-Bibliothek von Python ändere. Mathematisch entspricht dies einer Vormultiplikation der Matrix mit der Permutationsmatrix P und einer Nachmultiplikation mit P ^ -1 = P ^ T, dies ist jedoch keine rechnerisch sinnvolle Lösung.
Im Moment tausche ich manuell Zeilen und Spalten aus, aber ich hätte erwartet, dass numpy eine nette Funktion f (M, v) hat, wobei M n Zeilen und Spalten und v n Einträge hat, so dass f (M, v) aktualisiert wird M entsprechend der Indexpermutation v. Möglicherweise scheitere ich gerade am Suchen des Internets.
So etwas könnte mit Numpys "Advanced Indexing" möglich sein, aber ich verstehe, dass eine solche Lösung nicht vorhanden wäre. Auch für einige einfache Situationen kann es ausreichend sein, eine Indexpermutation nur separat zu verfolgen, aber dies ist in meinem Fall nicht zweckmäßig.
Hinzugefügt:
Wenn von Permutationen die Rede ist, bedeutet dies manchmal nur das Abtasten von zufälligen Permutationen, beispielsweise als Teil einer Prozedur zum Erhalten von p-Werten in Statistiken. Oder sie bedeuten das Zählen oder Aufzählen aller möglichen Permutationen. Ich spreche nicht über diese Dinge.
Hinzugefügt:
Die Matrix ist klein genug, um in den Arbeitsspeicher des Desktops zu passen, aber groß genug, um sie nicht unnötig zu kopieren. Eigentlich würde ich gerne Matrizen verwenden, die so groß wie möglich sind, aber ich möchte nicht mit der Unannehmlichkeit fertig werden, sie nicht im RAM zu halten, und ich führe O (N ^ 3) LAPACK-Operationen auf der Matrix aus, was auch der Fall wäre Begrenzen Sie die praktische Matrixgröße. Ich kopiere derzeit Matrizen dieser Größe unnötig, aber ich hoffe, dass dies für die Permutation leicht vermieden werden kann.
M[v]
, die Zeilen zu permutieren.