Wie identifiziere ich die linear unabhängigen Zeilen aus einer Matrix? Zum Beispiel,
Die vierte Zeile ist unabhängig.
Zunächst ist Ihre dritte Zeile linear abhängig von 1t und 2nd row. Ihre erste und vierte Spalte sind jedoch linear abhängig.
Zwei Methoden, die Sie verwenden könnten:
Eigenwert
Wenn ein Eigenwert der Matrix Null ist, ist sein entsprechender Eigenvektor linear abhängig. Die Dokumentation eig stats die Eigenwerte nicht unbedingt bestellt. Ich weiß nicht wirklich, ob der Eigenwert im resultierenden Array nur sortiert ist oder eine zufällige Reihenfolge hat. Unter der Annahme, dass die Eigenwerte Ihren Zeilenvektoren entsprechen, wäre eine Methode jedoch:
%Vor%Cauchy-Schwarz Ungleichung
Um die lineare Abhängigkeit von Vektoren zu testen und herauszufinden, welche, könnten Sie die Cauchy-Schwarz-Ungleichung
Um die Zeilen zu testen, ist ein ähnlicher Ansatz.
Dann könntest du das verlängern, um alle Kombinationen von Vektoren zu testen, aber ich stelle mir vor, dass diese Lösung schlecht mit der Größe skaliert.
Mit sympy finden Sie die linearen unabhängigen Zeilen mit: sympy.Matrix.rref
:
Was grundsätzlich sagt, dass die Zeilen 0, 1 und 3 linear unabhängig sind, während Zeile 2 nicht ist (es ist eine lineare Kombination von Zeile 0 und 1).
Dann könnten Sie diese Zeilen mit Slicing entfernen:
%Vor%Dies funktioniert auch gut für rechteckige (nicht nur für quadratische) Matrizen.
Ich habe den Code für die Cauchy-Schwartz-Ungleichung bearbeitet, der besser mit der Dimension skaliert: Die Eingaben sind die Matrix und ihre Dimension, während die Ausgabe eine neue rechteckige Matrix ist, die entlang ihrer Zeilen die linear unabhängigen Spalten der Ausgangsmatrix enthält. Dies funktioniert in der Annahme, dass die erste Spalte niemals null ist, aber leicht verallgemeinert werden kann, um auch diesen Fall zu implementieren. Eine andere Sache, die ich beobachtete, ist, dass 1e-5 eine "schlampige" Schwelle zu sein scheint, da einige bestimmte pathologische Vektoren in diesem Fall linear abhängig waren: 1e-4 gibt mir nicht die gleichen Probleme. Ich hoffe, das könnte hilfreich sein: Es war ziemlich schwierig für mich, eine wirklich funktionierende Routine zu finden, um li-Vektoren zu extrahieren, und deshalb bin ich bereit, meine zu teilen. Wenn Sie einen Fehler finden, melden Sie ihn bitte !!
%Vor%Ich weiß, dass das vor einer Weile gefragt wurde, aber hier ist eine sehr einfache Lösung. Wenn ein Array gegeben ist, findet das Folgende einen Satz linear unabhängiger Vektoren, indem es fortlaufend einen Vektor hinzufügt und prüft, ob der Rang zugenommen hat:
%Vor%Tags und Links python linear-algebra numpy matrix