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.

War es hilfreich?

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

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

Hier ist eine kurze Anleitung

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.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top