Python Inverse einer Matrix
-
03-07-2019 - |
Frage
Wie erhalte ich die Inverse einer Matrix in Python? Ich habe es selbst umgesetzt, aber es ist reiner Python, und ich vermute, es gibt schnellere Module gibt es zu tun.
Lösung
Sie sollten einen Blick auf numpy wenn Sie Manipulation tun Matrix. Dies ist ein Modul hauptsächlich in C geschrieben, die viel schneller als Programmierung in reinem Python sein. Hier ist ein Beispiel dafür, wie eine Matrix zu invertieren, und tut andere Matrixmanipulation.
from numpy import matrix
from numpy import linalg
A = matrix( [[1,2,3],[11,12,13],[21,22,23]]) # Creates a matrix.
x = matrix( [[1],[2],[3]] ) # Creates a matrix (like a column vector).
y = matrix( [[1,2,3]] ) # Creates a matrix (like a row vector).
print A.T # Transpose of A.
print A*x # Matrix multiplication of A and x.
print A.I # Inverse of A.
print linalg.solve(A, x) # Solve the linear equation system.
Sie können auch einen Blick auf das Modul Array, das eine ist viel effizientere Implementierung von Listen, wenn Sie mit nur einem Datentyp zu behandeln.
Andere Tipps
Stellen Sie sicher, dass Sie wirklich die Matrix invertieren müssen. Dies ist oft unnötig und kann numerisch instabil sein. Wenn die meisten Leute fragen, wie eine Matrix invertieren, wollen sie wirklich wissen, wie Ax = b zu lösen, wobei A eine Matrix ist und x und b sind Vektoren. Es ist effizienter und genauer Code zu verwenden, als die Gleichung Ax = b für x direkt löst ein invers zu berechnen dann die inverse von B. multiplizieren Auch wenn Sie Ax = b für viele b-Werte lösen müssen, ist es keine gute Idee, A. invertieren Wenn Sie das System für mehrere b-Werte zu lösen haben, speichern Sie die Cholesky-Faktorisierung von A, aber es nicht invertieren.
Es ist schade, dass die gewählte Matrix, hier noch einmal wiederholt, entweder im Singular oder schlecht konditionierte:
A = matrix( [[1,2,3],[11,12,13],[21,22,23]])
definitionsgemäß das Inverse von A, wenn sie durch die Matrix A multipliziert selbst muss eine Einheitsmatrix ergeben. Die A in der viel gepriesenen Erklärung gewählt macht das nicht. In der Tat nur bei den inversen Suche gibt einen Hinweis, dass die Umkehrung nicht richtig funktioniert. Schauen Sie sich die Größe der einzelnen Begriffe - sie sind sehr, sehr groß im Vergleich zu den Bedingungen der ursprünglichen Matrix A ...
Es ist bemerkenswert, dass die Menschen, wenn ein Beispiel einer Matrix Kommissionierung so oft gelingt, eine singuläre Matrix zu holen!
ich habe ein Problem mit der Lösung haben, so in sie sah weiter. Auf der ubuntu-kubuntu-Plattform, das Debian-Paket numpy nicht über die Matrix und die linalg Unterpakete, so dass zusätzlich zu Import von numpy muss scipy auch importiert werden.
Wenn die Diagonalglieder von A nach einem ausreichend großen Faktor multipliziert werden, sagen 2, wird die Matrix wahrscheinlich aufhören Einzahl oder in der Nähe von Singular sein. So
A = matrix( [[2,2,3],[11,24,13],[21,22,46]])
wird weder Singular noch fast singulär und das Beispiel gibt aussagekräftige Ergebnisse ... Wenn mit Gleitkommazahlen Umgang muss man die Auswirkungen von inavoidable Rundungsfehlerananlysen wachsam sein.
Dank für Ihren Beitrag,
Oldal.
Sie könnten die Determinante der Matrix berechnen, die rekursiv und dann die benachbarten Matrix bilden
Ich denke, das funktioniert nur für quadratische Matrizen
Eine andere Möglichkeit, diese von Rechen gram-schmidt Orthogonalisierung beinhaltet und dann die Matrix zur Umsetzung, die Transponierung eines orthogonalisierten Matrix ist ihre Inverse!
Numpy wird für die meisten Menschen geeignet sein, aber Sie können auch tun Matrizen in Sympy
Versuchen Sie diese Befehle ausführen unter http://live.sympy.org/
M = Matrix([[1, 3], [-2, 3]])
M
M**-1
Für Spaß, versuchen M**(1/2)
Wenn Sie numpy hassen, raus RPy und die lokale Kopie von R, und es verwenden, statt.
(ich würde echo auch Sie, damit Sie wirklich die Matrix invertieren müssen. In R zum Beispiel linalg.solve und die solve () Funktion nicht wirklich eine vollständige Umkehrung zu tun, da es nicht notwendig ist.)