Python-program til at multiplicere to matricer

Indholdsfortegnelse

I dette eksempel lærer vi at multiplicere matricer på to forskellige måder: indlejret løkke og indlejret listeopbygning

For at forstå dette eksempel skal du have kendskab til følgende Python-programmeringsemner:

  • Python for Loop
  • Python-liste
  • Python-matricer og NumPy-arrays

I Python kan vi implementere en matrix som indlejret liste (liste inde i en liste).

Vi kan behandle hvert element som en række i matrixen.

For eksempel X = ((1, 2), (4, 5), (3, 6))repræsenterer en 3x2matrix.

Den første række kan vælges som X(0). Og elementet i første række, første kolonne kan vælges som X(0)(0).

Multiplikation af to matricer X og Y defineres kun, hvis antallet af kolonner i X er lig med antallet af rækker Y.

Hvis X er en n x mmatrix, og Y er en m x lmatrix, er XY defineret og har dimensionen n x l(men YX er ikke defineret). Her er et par måder at implementere matrixmultiplikation i Python på.

Kildekode: Matrixmultiplikation ved hjælp af Nested Loop

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

Produktion

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

I dette program har vi brugt indlejrede forsløjfer til at gentage hver række og hver kolonne. Vi akkumulerer summen af ​​produkter i resultatet.

Denne teknik er enkel, men beregningsmæssigt dyr, da vi øger rækkefølgen af ​​matrixen.

Til større matrixoperationer anbefaler vi optimerede softwarepakker som NumPy, som er flere gange (i størrelsesordenen 1000) gange hurtigere end ovenstående kode.

Kildekode: Matrixmultiplikation ved hjælp af indlejret listeforståelse

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

Resultatet af dette program er det samme som ovenfor. For at forstå ovenstående kode skal vi først vide om indbygget funktion zip()og udpakning af argumentlisten ved hjælp af * operator.

Vi har brugt indlejret listeforståelse til at gentage hvert element i matrixen. Koden ser kompliceret og ulæselig ud i starten. Men når du først har fået fat i listen, vil du sandsynligvis ikke gå tilbage til indlejrede sløjfer.

Interessante artikler...