Tensori, matrici, vettori e python : prodotto tra matrici – terza parte

INFORMATICA, MATEMATICA

In questo articolo continueremo ad approfondire l’algebra lineare ed in particolare, inizieremo a vedere alcune operazioni che possono essere fatte sui tensori. Per seplicità, utilizzeremo per gli esempi successivi solo tensori 2D (bidimensionali) ovvero matrici. In questo articolo, tratteremo, in particoare l’operazione di  moltiplicazione tra tensori, operazione molto interessante, anche da un punto di vista applicativo; se avete letto, infatti,  il mio articolo sulle CNN vi rircorderete che una parte fondamentale della convoluzione è l’applicazione del filtro di convoluzione, che di fatto si traduce in una operazione di moltiplicazione tra matrici. Proviamo a dare una definione formale: Il prodotto tra matrici, detto anche prodotto riga per colonna, è una delle operazioni tra matrici più delicate. A differenza della moltiplicazione tra scalari il prodotto tra mattrici non è commutativo e si può eseguire solo in certe condizioni. Quando si può svolgere, esso restituisce una matrice avente tante righe quante sono quelle della prima matrice e tante colonne quante sono quelle della seconda. Quindi nell’esempio seguente:

\begin{bmatrix} 1 & 2 & 3 \\ 3 & 0 & 1 \end{bmatrix} X \begin{bmatrix} 1 & 0 & 2 \\ 0& 1 & 1\\ 1& 2 & 1 \end{bmatrix}

il risultato della moltiplicazione sarà una matrice 2X3. Per moltiplicare due matrici, esse devono essere dimensionalmente compatibili, cioè la prima matrice dovrà avere lo stesso numero di colonne delle righe della seconda matrice.Nel nostro esempio  la prima matrice, infatti, ha shape 2X3 mentre la seconda matrice ha shape 3×3. Per capire se le due matrici sono compatibili per la moltiplicazione, possiamo usare un metodo molto semplice, basterà scrivere lo shape delle matrici e verificare se i termini intermedi sono uguali. Nel nostro caso avremo : 2X3 3X3 e quindi  le matrici sono compatibili per la moltiplicazione. Ma quale sarà il risultato?

Bene il risultato sarà una matrrice 2X3 del tipo:

M=\begin{bmatrix} M_{11} & M_{12} & M_{13} \\ M_{21} & M_{22} & M_{23} \end{bmatrix}

dove :

\\M_{11}=1*1+2*0+3*1\\ \\M_{12}=1*0+2*1+3*2 \\...

Ma come si può ottenere questo risultato in python? Per risolvere il problema possiamo scomodare numpy ed eseguire alcuni semplici comandi. Lanciamo dunque la console python direttamente in shell oppure usiamo jupiter notebook e scriviamo:

>>> import numpy as np

>>> M1=[[1,2,3],[3,0,1]]

>>> M2=[[1,0,2],[0,1,1],[1,2,1]]

>>> M=np.dot(M1,M2)

>>> print(M)

[[4 8 7]

 [4 2 7]]

Possiamo verificare in modo semplice anche la dimensione delle matrici (shape) coinvolte e verificarne la compatibilità:

>>> np.shape(M1)

(2, 3)

>>> np.shape(M2)

(3, 3)

>>> np.shape(M)

(2, 3)

>>> 

 

<<seconda parte

Se vuoi farmi qualche richiesta o contattarmi per un aiuto riempi il seguente form