Broadcasting
Prima di approfondire le operazioni matematiche in NumPy, è fondamentale comprendere un concetto chiave: broadcasting.
Il broadcasting è un metodo per allineare le forme degli array al fine di eseguire operazioni aritmetiche senza doverli rimodellare manualmente. In sostanza, il broadcasting adatta automaticamente le forme degli array.
Quando NumPy lavora con due array, verifica la compatibilità delle loro forme per determinare se possono essere utilizzati insieme tramite broadcasting.
Se due array hanno già la stessa forma, il broadcasting non è necessario.
Stesso Numero di Dimensioni
Supponiamo di avere due array sui quali vogliamo eseguire una somma, con le seguenti forme: (2, 3) e (1, 3). NumPy confronta le forme dei due array partendo dalla dimensione più a destra e procedendo verso sinistra. Cioè, confronta prima 3 e 3, poi 2 e 1.
Due dimensioni sono considerate compatibili se sono uguali oppure se una delle due è 1:
- Per le dimensioni 3 e 3, sono compatibili perché sono uguali;
- Per le dimensioni 2 e 1, sono compatibili perché una delle due è 1.
Poiché tutte le dimensioni sono compatibili, le forme sono considerate compatibili. Pertanto, gli array possono essere trasmessi tramite broadcasting, ottenendo un'operazione di somma 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)
array_2 è creato come un array 2D contenente una sola riga, motivo per cui la sua forma è (1, 3).
Ma cosa succederebbe se lo creassimo come un array 1D con forma (3,)?
Numero diverso di dimensioni
Quando un array ha meno dimensioni rispetto all'altro, le dimensioni mancanti vengono considerate di dimensione 1. Ad esempio, considera due array con forme (2, 3) e (3,). Qui, 3 = 3, e la dimensione sinistra mancante viene considerata 1, quindi la forma (3,) diventa (1, 3). Poiché le forme (2, 3) e (1, 3) sono compatibili, questi due array possono essere trasmessi (broadcasted).
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 array, è possibile 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 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, in cui 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 (2,). La dimensione mancante viene considerata come 1, quindi le forme diventano (2, 3) e (1, 2).
Procedendo 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
Broadcasting
Scorri per mostrare il menu
Prima di approfondire le operazioni matematiche in NumPy, è fondamentale comprendere un concetto chiave: broadcasting.
Il broadcasting è un metodo per allineare le forme degli array al fine di eseguire operazioni aritmetiche senza doverli rimodellare manualmente. In sostanza, il broadcasting adatta automaticamente le forme degli array.
Quando NumPy lavora con due array, verifica la compatibilità delle loro forme per determinare se possono essere utilizzati insieme tramite broadcasting.
Se due array hanno già la stessa forma, il broadcasting non è necessario.
Stesso Numero di Dimensioni
Supponiamo di avere due array sui quali vogliamo eseguire una somma, con le seguenti forme: (2, 3) e (1, 3). NumPy confronta le forme dei due array partendo dalla dimensione più a destra e procedendo verso sinistra. Cioè, confronta prima 3 e 3, poi 2 e 1.
Due dimensioni sono considerate compatibili se sono uguali oppure se una delle due è 1:
- Per le dimensioni 3 e 3, sono compatibili perché sono uguali;
- Per le dimensioni 2 e 1, sono compatibili perché una delle due è 1.
Poiché tutte le dimensioni sono compatibili, le forme sono considerate compatibili. Pertanto, gli array possono essere trasmessi tramite broadcasting, ottenendo un'operazione di somma 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)
array_2 è creato come un array 2D contenente una sola riga, motivo per cui la sua forma è (1, 3).
Ma cosa succederebbe se lo creassimo come un array 1D con forma (3,)?
Numero diverso di dimensioni
Quando un array ha meno dimensioni rispetto all'altro, le dimensioni mancanti vengono considerate di dimensione 1. Ad esempio, considera due array con forme (2, 3) e (3,). Qui, 3 = 3, e la dimensione sinistra mancante viene considerata 1, quindi la forma (3,) diventa (1, 3). Poiché le forme (2, 3) e (1, 3) sono compatibili, questi due array possono essere trasmessi (broadcasted).
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 array, è possibile 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 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, in cui 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 (2,). La dimensione mancante viene considerata come 1, quindi le forme diventano (2, 3) e (1, 2).
Procedendo 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!