Gibt es einen Algorithmus zum Umordnen einer Matrix in blockdiagonale Form, da die Matrix blockdiagonaler Natur ist, aber mit einer unklugen Wahl der Basis randomisiert wird?
Gibt es dafür insbesondere Python-Module?
Gibt es einen Algorithmus zum Umordnen einer Matrix in blockdiagonale Form, da die Matrix blockdiagonaler Natur ist, aber mit einer unklugen Wahl der Basis randomisiert wird?
Gibt es dafür insbesondere Python-Module?
Antworten:
Ist die Matrix dünn oder dicht? Ist es symmetrisch?
Die Tatsache, dass Ihre Matrix eine Blockdiagonale (bis zu einer Neuordnung) aufweist, bedeutet, dass das Diagramm nicht verbunden ist. Wenn Sie herausfinden, welche Scheitelpunkte in einem Block zusammen sein sollten, müssen Sie die verbundenen Komponenten des Diagramms ermitteln. Sie können dies mit einer Breitensuche tun . Da die umgekehrte Cuthill-McKee-Reihenfolge einer Matrix im Wesentlichen eine Breitensuche ist, können Sie wahrscheinlich den Python-Code einer anderen Person für die RCM-Reihenfolge finden und direkt verwenden oder für Ihre Zwecke ändern.
Jede Matrix ist in einer klugen Wahl der Basis blockdiagonal - dies wird als Jordan-Normalform bezeichnet , und die Basis besteht aus ihren verallgemeinerten Eigenvektoren. Wenn die Matrix symmetrisch ist, besteht diese Basis aus Eigenvektoren, und Sie können sie beispielsweise mit dem QR-Algorithmus berechnen . SciPy bietet das Modul linalg.qr
zur Berechnung der erforderlichen QR-Zerlegungen. Andernfalls können Sie die Singularwertzerlegung verwenden , die mit berechnet werden kann linalg.svd
.