Ich möchte numpy verwenden, um die Umkehrung zu berechnen. Aber ich bekomme eine Fehlermeldung:
'numpy.ndarry' object has no attribute I
Um die Inverse einer Matrix in Numpy zu berechnen, sagen wir Matrix M, sollte es einfach sein:
print M.I
Hier ist der Code:
x = numpy.empty((3,3), dtype=int)
for comb in combinations_with_replacement(range(10), 9):
x.flat[:] = comb
print x.I
Ich gehe davon aus, dass dieser Fehler auftritt, weil x jetzt flach ist und I
der Befehl ' ' daher nicht kompatibel ist. Gibt es dafür eine Lösung?
Mein Ziel ist es, die INVERSE MATRIX jeder möglichen numerischen Matrixkombination zu drucken.
np.matrix(x)
damit die.I
Methode verfügbar ist.Antworten:
Das
I
Attribut existiert nur fürmatrix
Objekte, nicht fürndarray
s. Sie könnennumpy.linalg.inv
Arrays invertieren:Beachten Sie, dass die Art und Weise, wie Sie Matrizen generieren, nicht alle invertierbar sind. Sie müssen entweder die Art und Weise ändern, in der Sie Matrizen generieren, oder diejenigen überspringen, die nicht invertierbar sind.
try: inverse = numpy.linalg.inv(x) except numpy.linalg.LinAlgError: # Not invertible. Skip this one. pass else: # continue with what you were doing
Wenn Sie alle 3x3-Matrizen mit Elementen aus [0, 10) durchgehen möchten, möchten Sie Folgendes:
for comb in itertools.product(range(10), repeat=9):
anstatt
combinations_with_replacement
, oder Sie überspringen Matrizen wienumpy.array([[0, 1, 0], [0, 0, 0], [0, 0, 0]])
quelle
Eine andere Möglichkeit, dies zu tun, besteht darin, die numpy-
matrix
Klasse (anstelle eines numpy-Arrays) und dasI
Attribut zu verwenden. Zum Beispiel:>>> m = np.matrix([[2,3],[4,5]]) >>> m.I matrix([[-2.5, 1.5], [ 2. , -1. ]])
quelle
np.matrix
offiziell abgeraten, da dies zu Unklarheiten fürnp.array
Benutzer führt: scipy.linalgInverse einer Matrix mit Python und Numpy:
>>> import numpy as np >>> b = np.array([[2,3],[4,5]]) >>> np.linalg.inv(b) array([[-2.5, 1.5], [ 2. , -1. ]])
Nicht alle Matrizen können invertiert werden. Zum Beispiel sind singuläre Matrizen nicht invertierbar :
>>> import numpy as np >>> b = np.array([[2,3],[4,6]]) >>> np.linalg.inv(b) LinAlgError: Singular matrix
Lösung des singulären Matrixproblems:
Versuchen Sie, die Singular Matrix-Ausnahme abzufangen, und fahren Sie fort, bis Sie eine Transformation finden, die Ihren vorherigen Kriterien entspricht UND auch invertierbar ist.
Intuition, warum Matrixinversion nicht immer durchgeführt werden kann; wie in singulären Matrizen:
Stellen Sie sich einen alten Overhead-Filmprojektor vor, der ein helles Licht durch den Film auf eine weiße Wand strahlt. Die Pixel im Film werden auf die Pixel an der Wand projiziert.
Wenn ich die Filmprojektion auf einem einzelnen Bild stoppe, sehen Sie die Pixel des Films an der Wand und ich bitte Sie, den Film basierend auf dem, was Sie sehen, neu zu generieren. Das ist einfach, sagen Sie, nehmen Sie einfach die Umkehrung der Matrix, die die Projektion durchgeführt hat. Eine Umkehrung einer Matrix ist die Umkehrung der Projektion.
Stellen Sie sich nun vor, der Projektor wäre beschädigt, und ich habe ein verzerrtes Objektiv vor den Film gestellt. Jetzt werden mehrere Pixel auf dieselbe Stelle an der Wand projiziert. Ich habe Sie erneut gebeten, "diese Operation mit der inversen Matrix rückgängig zu machen". Sie sagen: "Ich kann nicht, weil Sie Informationen durch die Linsenverzerrung zerstört haben. Ich kann nicht dorthin zurückkehren, wo wir waren, weil die Matrix entweder Singular oder Degenerate ist."
Eine Matrix, mit der einige Daten in andere Daten umgewandelt werden können, kann nur invertiert werden, wenn der Prozess ohne Informationsverlust rückgängig gemacht werden kann. Wenn Ihre Matrix nicht invertiert werden kann, definieren Sie Ihre Projektion möglicherweise mithilfe einer Guess-and-Check-Methode, anstatt einen Prozess zu verwenden, der eine nicht beschädigende Transformation garantiert.
Wenn Sie eine Heuristik oder eine weniger als perfekte mathematische Genauigkeit verwenden, müssen Sie einen anderen Prozess definieren, um Verzerrungen zu verwalten und unter Quarantäne zu stellen, damit die Programmierung durch Brownsche Bewegung fortgesetzt werden kann.
Quelle:
http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.inv.html#numpy.linalg.inv
quelle
Was ist mit inv ?
Beispiel: my_inverse_array = inv (my_array)
quelle