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.
123456789import 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.
123456789import 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.
123456import 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:
12345678import 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!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Awesome!
Completion rate improved to 3.7
Trasmissione
Scorri per mostrare il menu
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.
123456789import 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.
123456789import 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.
123456import 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:
12345678import 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!