Python-programma om twee matrices te vermenigvuldigen

In dit voorbeeld zullen we leren matrices op twee verschillende manieren te vermenigvuldigen: geneste lus en geneste lijstcombinatie

Om dit voorbeeld te begrijpen, moet u kennis hebben van de volgende programmeeronderwerpen in Python:

  • Python voor Loop
  • Python-lijst
  • Python-matrices en NumPy-arrays

In Python kunnen we een matrix implementeren als geneste lijst (lijst in een lijst).

We kunnen elk element behandelen als een rij van de matrix.

X = ((1, 2), (4, 5), (3, 6))Zou bijvoorbeeld een 3x2matrix vertegenwoordigen .

De eerste rij kan worden geselecteerd als X(0). En het element in de eerste rij, de eerste kolom kan worden geselecteerd als X(0)(0).

Vermenigvuldiging van twee matrices X en Y wordt alleen gedefinieerd als het aantal kolommen in X gelijk is aan het aantal rijen Y.

Als X een n x mmatrix is ​​en Y een m x lmatrix, dan is XY gedefinieerd en heeft het de dimensie n x l(maar YX is niet gedefinieerd). Hier zijn een aantal manieren om matrixvermenigvuldiging in Python te implementeren.

Broncode: matrixvermenigvuldiging met behulp van geneste lus

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

Uitvoer

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

In dit programma hebben we geneste forlussen gebruikt om door elke rij en elke kolom te lopen. We tellen de som van producten op in het resultaat.

Deze techniek is eenvoudig maar rekenkundig duur naarmate we de volgorde van de matrix vergroten.

Voor grotere matrixbewerkingen raden we geoptimaliseerde softwarepakketten aan, zoals NumPy, dat verschillende (in de orde van 1000) keer sneller is dan de bovenstaande code.

Broncode: matrixvermenigvuldiging met behulp van geneste lijstbegrip

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

De output van dit programma is hetzelfde als hierboven. Om de bovenstaande code te begrijpen, moeten we eerst de ingebouwde functie kennen zip()en de argumentlijst uitpakken met de * operator.

We hebben geneste lijstbegrip gebruikt om elk element in de matrix te doorlopen. De code ziet er in eerste instantie ingewikkeld en onleesbaar uit. Maar als je eenmaal het begrip van de lijst onder de knie hebt, zul je waarschijnlijk niet meer teruggaan naar geneste lussen.

Interessante artikelen...