Come fare un tensore in Python
In Python posso definire un tensore a tre dimensioni ( matrice tridimensionale o cubica ) con la funzione array di NumPy.
array([m1,m2,m3])
Ogni argomento m è una matrice 3x3 che definisce uno strato del tensore ( cubo ).
In alternativa, posso usare la funzione tensor di PyTorch
tensor([m1,m2,m3])
Entrambi metodi creano una matrice cubica con 27 elementi in 3 strati ( matrici ).
Cos'è un tensore? Un tensore è una matrice a più dimensioni. Ad esempio, una matrice tridimensionale (3D), quadridimensionale (4D) o n-dimensionale. E' un concetto di algebra lineare particolarmente utile nello studio della fisica e nel machine learning.
Essendo un oggetto array, posso accedere a ogni elemento nello spazio del tensore usando i tre indici m[x,y,z].
Un esempio pratico
Importo il modulo numpy in Python.
Poi creo un tensore a tre dimensioni con la funzione array().
>>> import numpy as np
>>> m=np.array([[[1,2,3],[4,5,6],[7,8,9]],[[10,11,12],[13,14,15],[16,17,18]],[[19,20,21],[22,23,24],[25,26,27]]])
Con questa semplice istruzione ho creato il tensore.
E' un oggetto cubico a tre dimensioni (x,y,z).
Il contenuto del tensore è il seguente:
>>> m
array([[[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9]],
[[10, 11, 12],
[13, 14, 15],
[16, 17, 18]],
[[19, 20, 21],
[22, 23, 24],
[25, 26, 27]]])
Come accedere agli elementi del tensore
Posso leggere ogni elemento del tensore indicando gli indici delle coordinate (x,y,z) nello spazio vettoriale dell'array.
- x = strato o matrice ( 0, 1, 2 )
- y = riga ( 0, 1, 2 )
- z = colonna ( 0, 1, 2 )
Nota. L'accesso agli elementi del tensore è simile all'accesso agli elementi di una matrice a due dimensione. L'unica differenza è che gli indici sono tre [x,y,z] anziché due [y,z]. Una matrice a due dimensione ha solo gli indici delle righe e delle colonne. Il tensore ha anche l'indice dello strato z ( quota o profondità ).
Esempio
Provo accedere al primo elemento della prima linea del primo strato del tensore (x=0, y=0, z=0).
>>> m[0,0,0]
1
Ora accedo al secondo elemento della prima linea del primo strato del tensore (x=0, y=0, z=1)
>>> m[0,0,1]
2
Accedo al secondo elemento della seconda linea del primo strato del tensore (x=0, y=1, z=1)
>>> m[0,1,1]
5
Infine, accedo al secondo elemento della seconda linea del secondo strato del tensore (x=1, y=1, z=1)
>>> m[1,1,1]
14
Con la stessa tecnica posso creare un tensore a 4 dimensioni o superiore.
E così via.