Program w Pythonie do mnożenia dwóch macierzy

W tym przykładzie nauczymy się mnożyć macierze na dwa różne sposoby: zagnieżdżoną pętlę i zagnieżdżoną listę

Aby zrozumieć ten przykład, powinieneś znać następujące tematy programowania w Pythonie:

  • Python for Loop
  • Lista Pythona
  • Macierze Pythona i tablice NumPy

W Pythonie możemy zaimplementować macierz jako listę zagnieżdżoną (lista wewnątrz listy).

Każdy element możemy traktować jako wiersz macierzy.

Na przykład X = ((1, 2), (4, 5), (3, 6))reprezentowałby 3x2macierz.

Pierwszy wiersz można wybrać jako X(0). I element w pierwszym wierszu, pierwszej kolumnie można wybrać jako X(0)(0).

Mnożenie dwóch macierzy X i Y jest określone tylko wtedy, gdy liczba kolumn w X jest równa liczbie wierszy Y.

Jeśli X jest n x mmacierzą, a Y jest m x lmacierzą, to XY jest zdefiniowane i ma wymiar n x l(ale YX nie jest zdefiniowane). Oto kilka sposobów implementacji mnożenia macierzy w Pythonie.

Kod źródłowy: mnożenie macierzy za pomocą pętli zagnieżdżonej

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

Wynik

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

W tym programie użyliśmy zagnieżdżonych forpętli do iteracji po każdym wierszu i każdej kolumnie. W wyniku kumulujemy sumę produktów.

Ta technika jest prosta, ale kosztowna obliczeniowo, ponieważ zwiększamy kolejność macierzy.

W przypadku większych operacji na macierzach zalecamy zoptymalizowane pakiety oprogramowania, takie jak NumPy, które są kilka (w kolejności 1000) razy szybsze niż powyższy kod.

Kod źródłowy: mnożenie macierzy przy użyciu funkcji rozumienia list zagnieżdżonych

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

Wynik tego programu jest taki sam jak powyżej. Aby zrozumieć powyższy kod, musimy najpierw wiedzieć o funkcji wbudowanej zip()i rozpakowaniu listy argumentów za pomocą operatora *.

Użyliśmy zagnieżdżonego przetwarzania list, aby iterować po każdym elemencie macierzy. Na początku kod wygląda na skomplikowany i nieczytelny. Ale kiedy już opanujesz rozumienie list, prawdopodobnie nie wrócisz do zagnieżdżonych pętli.

Interesujące artykuły...