Python program za množenje dviju matrica

U ovom ćemo primjeru naučiti umnožavati matrice na dva različita načina: ugniježđena petlja i, ugniježđeno proširenje popisa

Da biste razumjeli ovaj primjer, trebali biste imati znanje o sljedećim temama programiranja na Pythonu:

  • Python za Loop
  • Popis Pythona
  • Python matrice i NumPy nizovi

U Pythonu možemo implementirati matricu kao ugniježđeni popis (popis unutar popisa).

Svaki element možemo tretirati kao red matrice.

Na primjer X = ((1, 2), (4, 5), (3, 6)), predstavljao bi 3x2matricu.

Prvi redak može se odabrati kao X(0). I, element u prvom retku, prvom stupcu može se odabrati kao X(0)(0).

Množenje dviju matrica X i Y definirano je samo ako je broj stupaca u X jednak broju redaka Y.

Ako je X n x mmatrica, a Y m x lmatrica, tada je XY definiran i ima dimenziju n x l(ali YX nije definiran). Evo nekoliko načina za implementaciju množenja matrica u Pythonu.

Izvorni kod: Množenje matrice pomoću ugniježđene petlje

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

Izlaz

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

U ovom smo programu koristili ugniježđene forpetlje za prelazak kroz svaki redak i svaki stupac. Rezultat akumuliramo zbroj proizvoda.

Ova je tehnika jednostavna, ali računski skupa jer povećavamo redoslijed matrice.

Za veće operacije s matricom preporučujemo optimizirane softverske pakete poput NumPy koji je nekoliko (u redoslijedu od 1000) puta brži od gornjeg koda.

Izvorni kod: Množenje matrice pomoću razumijevanja ugniježđenih popisa

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

Rezultat ovog programa je isti kao gore. Da bismo razumjeli gornji kod, prvo moramo znati o ugrađenoj funkciji zip()i raspakiranju popisa argumenata pomoću operatora *.

Upotrijebili smo razumijevanje ugniježđenog popisa za itiriranje kroz svaki element u matrici. Kôd isprva izgleda složeno i nečitko. No, jednom kad naletite na poimanja popisa, vjerojatno se nećete vratiti u ugniježđene petlje.

Zanimljivi članci...