Python-Programm zum Multiplizieren von zwei Matrizen

Inhaltsverzeichnis

In diesem Beispiel lernen wir, Matrizen auf zwei verschiedene Arten zu multiplizieren: verschachtelte Schleife und verschachtelte Listenkomprimierung

Um dieses Beispiel zu verstehen, sollten Sie die folgenden Python-Programmierthemen kennen:

  • Python für Loop
  • Python-Liste
  • Python-Matrizen und NumPy-Arrays

In Python können wir eine Matrix als verschachtelte Liste implementieren (Liste innerhalb einer Liste).

Wir können jedes Element als eine Zeile der Matrix behandeln.

Zum Beispiel X = ((1, 2), (4, 5), (3, 6))würde eine 3x2Matrix darstellen.

Die erste Zeile kann als ausgewählt werden X(0). Und das Element in der ersten Zeile und ersten Spalte kann als ausgewählt werden X(0)(0).

Die Multiplikation zweier Matrizen X und Y wird nur definiert, wenn die Anzahl der Spalten in X gleich der Anzahl der Zeilen Y ist.

Wenn X eine n x mMatrix und Y eine m x lMatrix ist, ist XY definiert und hat die Dimension n x l(YX ist jedoch nicht definiert). Hier sind einige Möglichkeiten, um die Matrixmultiplikation in Python zu implementieren.

Quellcode: Matrixmultiplikation mit verschachtelter Schleife

# Program to multiply two matrices using nested loops # 3x3 matrix X = ((12,7,3), (4 ,5,6), (7 ,8,9)) # 3x4 matrix Y = ((5,8,1,2), (6,7,3,0), (4,5,9,1)) # result is 3x4 result = ((0,0,0,0), (0,0,0,0), (0,0,0,0)) # iterate through rows of X for i in range(len(X)): # iterate through columns of Y for j in range(len(Y(0))): # iterate through rows of Y for k in range(len(Y)): result(i)(j) += X(i)(k) * Y(k)(j) for r in result: print(r) 

Ausgabe

 (114, 160, 60, 27) (74, 97, 73, 14) (119, 157, 112, 23) 

In diesem Programm haben wir verschachtelte forSchleifen verwendet, um jede Zeile und jede Spalte zu durchlaufen. Wir akkumulieren die Summe der Produkte im Ergebnis.

Diese Technik ist einfach, aber rechenintensiv, da wir die Reihenfolge der Matrix erhöhen.

Für größere Matrixoperationen empfehlen wir optimierte Softwarepakete wie NumPy, die mehrere Male (in der Größenordnung von 1000) schneller sind als der obige Code.

Quellcode: Matrixmultiplikation mit verschachteltem Listenverständnis

# Program to multiply two matrices using list comprehension # 3x3 matrix X = ((12,7,3), (4 ,5,6), (7 ,8,9)) # 3x4 matrix Y = ((5,8,1,2), (6,7,3,0), (4,5,9,1)) # result is 3x4 result = ((sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)) for X_row in X) for r in result: print(r) 

Die Ausgabe dieses Programms ist die gleiche wie oben. Um den obigen Code zu verstehen, müssen wir zuerst die integrierte Funktion zip()und das Entpacken der Argumentliste mit dem Operator * kennen.

Wir haben das Verständnis verschachtelter Listen verwendet, um jedes Element in der Matrix zu durchlaufen. Der Code sieht zunächst kompliziert und unlesbar aus. Sobald Sie jedoch den Überblick über das Listenverständnis haben, werden Sie wahrscheinlich nicht mehr zu verschachtelten Schleifen zurückkehren.

Interessante Beiträge...