Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Broadcasting | Matematica con NumPy
Ultimate NumPy

bookBroadcasting

Prima di approfondire le operazioni matematiche in NumPy, è fondamentale comprendere un concetto chiave: broadcasting.

Note
Definizione

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.

Note
Nota

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.

123456789
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)
copy
Note
Nota

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).

123456789
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)
copy

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.

123456
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)
copy

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:

12345678
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)
copy
question mark

Seleziona tutti gli array con forme compatibili:

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 1

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Awesome!

Completion rate improved to 3.7

bookBroadcasting

Scorri per mostrare il menu

Prima di approfondire le operazioni matematiche in NumPy, è fondamentale comprendere un concetto chiave: broadcasting.

Note
Definizione

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.

Note
Nota

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.

123456789
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)
copy
Note
Nota

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).

123456789
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)
copy

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.

123456
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)
copy

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:

12345678
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)
copy
question mark

Seleziona tutti gli array con forme compatibili:

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 1
some-alt