Programma Python per moltiplicare due matrici

In questo esempio, impareremo a moltiplicare le matrici utilizzando due modi diversi: ciclo annidato e comprensione di liste annidate

Per comprendere questo esempio, dovresti avere la conoscenza dei seguenti argomenti di programmazione Python:

  • Python per Loop
  • Elenco Python
  • Matrici Python e array NumPy

In Python, possiamo implementare una matrice come lista annidata (lista all'interno di una lista).

Possiamo trattare ogni elemento come una riga della matrice.

Ad esempio X = ((1, 2), (4, 5), (3, 6))rappresenterebbe una 3x2matrice.

La prima riga può essere selezionata come X(0). Inoltre, l'elemento nella prima riga, la prima colonna può essere selezionata come X(0)(0).

La moltiplicazione di due matrici X e Y è definita solo se il numero di colonne in X è uguale al numero di righe Y.

Se X è una n x mmatrice e Y è una m x lmatrice, XY è definito e ha la dimensione n x l(ma YX non è definito). Ecco un paio di modi per implementare la moltiplicazione di matrici in Python.

Codice sorgente: moltiplicazione di matrici mediante loop annidato

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

Produzione

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

In questo programma, abbiamo utilizzato forcicli annidati per scorrere ogni riga e ogni colonna. Accumuliamo la somma dei prodotti nel risultato.

Questa tecnica è semplice ma computazionalmente costosa poiché aumentiamo l'ordine della matrice.

Per operazioni con matrici più grandi consigliamo pacchetti software ottimizzati come NumPy che è molte (nell'ordine di 1000) volte più veloce del codice sopra.

Codice sorgente: moltiplicazione di matrici mediante comprensione di elenchi annidati

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

L'output di questo programma è lo stesso di sopra. Per comprendere il codice precedente, dobbiamo prima conoscere la funzione incorporata zip()e la decompressione dell'elenco di argomenti utilizzando l'operatore *.

Abbiamo utilizzato la comprensione di elenchi annidati per scorrere ogni elemento nella matrice. All'inizio il codice sembra complicato e illeggibile. Ma una volta che hai imparato la comprensione delle liste, probabilmente non tornerai ai cicli annidati.

Articoli interessanti...