Matrix Multiplikation in Python?
Ich versuche multiplizieren von zwei Matrizen zusammen mit reinem python. Eingang (X1 ist ein 3x3 und Xt ist ein 3x2):
X1 = [[1.0016, 0.0, -16.0514],
[0.0, 10000.0, -40000.0],
[-16.0514, -40000.0, 160513.6437]]
Xt = [(1.0, 1.0),
(0.0, 0.25),
(0.0, 0.0625)]
wo Xt ist die zip-transponieren von einer anderen matrix. Nun, hier ist der code:
def matrixmult (A, B):
C = [[0 for row in range(len(A))] for col in range(len(B[0]))]
for i in range(len(A)):
for j in range(len(B[0])):
for k in range(len(B)):
C[i][j] += A[i][k]*B[k][j]
return C
Den Fehler, dass python gibt mir dies: IndexError: list index out of range. Ich bin mir jetzt nicht sicher, ob Xt ist anerkannt als eine matrix und noch ein list-Objekt, aber technisch sollte das funktionieren.
InformationsquelleAutor der Frage Ammar | 2012-05-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wirklich nicht wollen, zu verwenden
numpy
können Sie etwas wie das hier tun:Ergebnis:
InformationsquelleAutor der Antwort Akavall
Ist die falsche Initialisierung. Sie vertauscht row und col!
Korrekte Initialisierung wäre
Ich würde auch vorschlagen, besser Namenskonventionen. Wird Ihnen helfen, eine Menge debugging. Zum Beispiel:
Können Sie viel mehr tun, aber Sie bekommen die Idee...
InformationsquelleAutor der Antwort varunl
Spät zur party, aber wenn ich hatte zu tun, einige matrix-Arithmetik I definiert eine neue Klasse zu helfen. Innerhalb dieser Klasse können Sie Methoden definieren, wie
__add__
oder in Ihrem Gebrauch-Fall__matmul__
sodass Siea * b
odera *= b
eher alsmatrixMult(a,b)
.Ich habe einige code, der dies implementiert unten (ich ausgeschlossen, die unverhältnismäßig lang
__init__
Methode, die im wesentlichen erstellt eine zweidimensionale Listeself.mat
und ein Tupelself.order
nach dem, was an Sie übergeben wird)Hinweis:
__rmatmul__
erforderlich ist, so dassa @ b
undb @ a
beide korrekt funktionieren;__imatmul__
ist erforderlich füra @= b
um korrekt zu arbeiten;EDIT: ich habe gerade festgestellt, dass
__rmatmul__
ist nicht erforderlich, da es nur verwendet wird, um zu bewertena @ b
wenna
hat keine Methode__matmul__
. Da bin ich nur die Multiplikation von Matrizen durch andere Instanzenmatrix
a
wird haben eine Methode__matmul__
aber wenn ich jemals zu Bearbeiten, so dass Operationen arbeiten, sagen, mit 2D-arrays, muss ich wieder hinzufügen der__rmatmul__
so dasslist @ matrix
funktioniert so gut wiematrix @ list
.InformationsquelleAutor der Antwort speedstyle
Der Fehler Auftritt, hier:
Stürzt es ab, wenn k=2 ist. Dies ist, da die Tupel
A[i]
hat nur 2 Werte, und deshalb kann man sich nur nennen, bis A[i][1], bevor es von Fehlern.EDIT: Hör auf die Gerard 's Antworten zu" C " ist falsch. Es sollte
C=[[0 for row in range(len(A))] for col in range(len(A[0]))]
.Nur ein Tipp: ersetzen der ersten Schleife mit einer Multiplikation, so wäre es
C=[[0]*len(A) for col in range(len(A[0]))]
InformationsquelleAutor der Antwort beary605
Die Form der matrix
C
ist falsch; es ist das transponieren von dem, was Sie wirklich wollen, es zu sein. (Aber ich Stimme mit ulmangt: das Richtige ist das fast sicher zu verwenden, numpy, wirklich.)InformationsquelleAutor der Antwort Gareth McCaughan
Matrix-Multiplikation in reinem python.
InformationsquelleAutor der Antwort Prateek Khandelwal
InformationsquelleAutor der Antwort Kokul Jose
Alle die unten Antworten, würde Sie wieder die Liste.Ihre Notwendigkeit konvertieren matrix
InformationsquelleAutor der Antwort Vaibhav Kotwal
in zweiter Linie sollten Sie ändern
InformationsquelleAutor der Antwort Dankim