Tensori, matrici, vettori e python : prodotto tra matrici – terza parte
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:
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:
dove :
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) >>>
Sono amante della tecnologia e delle tante sfumature del mondo IT, ho partecipato, sin dai primi anni di università ad importanti progetti in ambito Internet proseguendo, negli anni, allo startup, sviluppo e direzione di diverse aziende; Nei primi anni di carriera ho lavorato come consulente nel mondo dell’IT italiano, partecipando attivamente a progetti nazionali ed internazionali per realtà quali Ericsson, Telecom, Tin.it, Accenture, Tiscali, CNR. Dal 2010 mi occupo di startup mediante una delle mie società techintouch S.r.l che grazie alla collaborazione con la Digital Magics SpA, di cui sono Partner la Campania, mi occupo di supportare ed accelerare aziende del territorio .
Attualmente ricopro le cariche di :
– CTO MareGroup
– CTO Innoida
– Co-CEO in Techintouch s.r.l.
– Board member in StepFund GP SA
Manager ed imprenditore dal 2000 sono stato,
CEO e founder di Eclettica S.r.l. , Società specializzata in sviluppo software e System Integration
Partner per la Campania di Digital Magics S.p.A.
CTO e co-founder di Nexsoft S.p.A, società specializzata nella Consulenza di Servizi in ambito Informatico e sviluppo di soluzioni di System Integration, CTO della ITsys S.r.l. Società specializzata nella gestione di sistemi IT per la quale ho partecipato attivamente alla fase di startup.
Sognatore da sempre, curioso di novità ed alla ricerca di “nuovi mondi da esplorare“.
Comments