Python program za množenje dveh matrik

V tem primeru se bomo naučili množiti matrike na dva različna načina: ugnezdena zanka in gnezdena razširitev seznama

Če želite razumeti ta primer, morate poznati naslednje programske teme Python:

  • Python za zanko
  • Python seznam
  • Pythonove matrike in matrike NumPy

V Pythonu lahko matriko implementiramo kot ugnezdeni seznam (seznam znotraj seznama).

Vsak element lahko obravnavamo kot vrstico matrike.

Na primer X = ((1, 2), (4, 5), (3, 6))bi predstavljala 3x2matriko.

Prvo vrstico lahko izberete kot X(0). Element v prvi vrstici in prvem stolpcu lahko izberemo kot X(0)(0).

Množenje dveh matrik X in Y je določeno le, če je število stolpcev v X enako številu vrstic Y.

Če je X n x mmatrika in Y m x lmatrica, je XY definiran in ima dimenzijo n x l(YX pa ni definiran). Tu je nekaj načinov za izvajanje množenja matrik v Pythonu.

Izvorna koda: Množenje matrice z uporabo ugnezdene zanke

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

Izhod

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

V tem programu smo uporabili ugnezdene forzanke za ponovitev vsake vrstice in vsakega stolpca. V rezultatu naberemo vsoto izdelkov.

Ta tehnika je preprosta, a računsko draga, saj povečujemo vrstni red matrike.

Za večje matrične operacije priporočamo optimizirane programske pakete, kot je NumPy, ki je nekajkrat (približno 1000) krat hitrejši od zgornje kode.

Izvorna koda: Množenje matrice z uporabo razumevanja ugnezdenega seznama

# 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 tega programa je enak zgoraj. Da bi razumeli zgornjo kodo, moramo najprej vedeti o vgrajeni funkciji zip()in razpakiranju seznama argumentov z operatorjem *.

Za ponovitev vsakega elementa v matriki smo uporabili razumevanje ugnezdenega seznama. Koda je sprva videti zapleteno in neberljivo. Toda, ko enkrat obesite sezname, se verjetno ne boste več vrnili v ugnezdene zanke.

Zanimive Članki...