Contenuti del Corso
Numpy Definitivo
Numpy Definitivo
Trasmissione
Prima di immergersi nelle operazioni matematiche in NumPy, è importante comprendere un concetto chiave — broadcasting.
Quando NumPy lavora con due array, verifica le loro forme per la compatibilità per determinare se possono essere trasmessi insieme.
Nota
Se due array hanno già la stessa forma, il broadcasting non è necessario.
Stesso Numero di Dimensioni
Supponiamo di avere due array per i quali vogliamo eseguire l'addizione, con le seguenti forme: (2, 3)
e (1, 3)
. NumPy confronta le forme dei due array partendo dalla dimensione più a destra e spostandosi verso sinistra. Cioè, confronta prima 3 e 3, poi 2 e 1.
Due dimensioni sono considerate compatibili se sono uguali o se una di esse è 1:
Per le dimensioni 3 e 3, sono compatibili perché sono uguali;
Per le dimensioni 2 e 1, sono compatibili perché una di esse è 1.
Poiché tutte le dimensioni sono compatibili, le forme sono considerate compatibili. Pertanto, gli array possono essere trasmessi, risultando in un'operazione di addizione standard tra matrici della stessa forma, che viene eseguita elemento per elemento.
import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) # Creating a 2D array with 1 row array_2 = np.array([[11, 12, 13]]) print(array_2.shape) # Broadcasting and element-wise addition result = array_1 + array_2 print(result)
Nota
array_2
è creato come un array 2D contenente solo una riga, motivo per cui la sua forma è(1, 3)
.
Ma cosa succederebbe se lo creassimo come un array 1D con una forma di (3,)
?
Differente Numero di Dimensioni
Quando un array ha meno dimensioni rispetto all'altro, le dimensioni mancanti sono trattate come se avessero una dimensione di 1. Ad esempio, considera due array con forme (2, 3)
e (3,)
. Qui, 3 = 3, e la dimensione sinistra mancante è considerata essere 1, quindi la forma (3,)
diventa (1, 3)
. Poiché le forme (2, 3)
e (1, 3)
sono compatibili, questi due array possono essere trasmessi.
import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) # Creating a 1D array array_2 = np.array([11, 12, 13]) print(array_2.shape) # Broadcasting and element-wise addition result = array_1 + array_2 print(result)
Broadcasting di Scalari
Oltre alle operazioni matematiche con gli array, possiamo anche eseguire operazioni simili tra un array e uno scalare (numero) grazie al broadcasting. In questo caso, l'array può avere qualsiasi forma, poiché uno scalare essenzialmente non ha forma, e tutte le sue dimensioni sono considerate essere 1. Pertanto, le forme sono sempre compatibili.
import numpy as np array = np.array([[1, 2, 3], [4, 5, 6]]) print(array.shape) # Broadcasting and element-wise addition result = array + 10 print(result)
Forme Incompatibili
Consideriamo anche un esempio di forme incompatibili, dove un'operazione aritmetica non può essere eseguita perché il broadcasting non è possibile:
Abbiamo un array 2x3
e un array 1D di lunghezza 2
, cioè una forma di (2,)
. La dimensione mancante è considerata essere 1, quindi le forme diventano (2, 3)
e (1, 2)
.
Muovendosi da sinistra a destra: 3 != 2, quindi abbiamo immediatamente dimensioni incompatibili, e quindi forme incompatibili. Se proviamo a eseguire il codice, otterremo un errore:
import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) array_2 = np.array([11, 12]) print(array_2.shape) # ValueError result = array_1 + array_2 print(result)
Grazie per i tuoi commenti!