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

Broadcasting

Scorri per mostrare il menu

Prima di approfondire le operazioni matematiche in NumPy, è importante 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 ridimensionare manualmente. In sostanza, il broadcasting adatta automaticamente le forme degli array.

Quando NumPy lavora con due array, verifica le loro forme per la compatibilità al fine di 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 su cui si desidera 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è, prima confronta 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 broadcasted, risultando in un'operazione di somma standard tra matrici della stessa forma, che viene eseguita elemento per elemento.

Broadcasting di base
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)
Note
Nota

array_2 viene creato come un array 2D contenente solo una riga, motivo per cui la sua shape è (1, 3).

Ma cosa succederebbe se lo creassi come un array 1D con shape (3,)?

Numero diverso di dimensioni

Quando un array ha meno dimensioni rispetto all'altro, le dimensioni mancanti vengono considerate di dimensione 1. Considera due array con forme (2, 3) e (3,). Qui, 3 = 3, e la dimensione mancante a sinistra 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 tramite broadcasting.

Broadcasting di un array 1D su un array 2D
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)

Broadcasting degli scalari

Oltre alle operazioni matematiche con gli 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.

Broadcasting di uno scalare su un array 2D
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)

Forme incompatibili

Esempio di forme incompatibili, in cui un'operazione aritmetica non può essere eseguita perché il broadcasting non è possibile:

Forme incompatibili

Si dispone di un array 2x3 e di un array 1D di lunghezza 2, cioè una forma (2,). La dimensione mancante viene considerata 1, quindi le forme diventano (2, 3) e (1, 2).

Partendo dalla dimensione più a destra: 323 \neq 2, quindi si hanno immediatamente dimensioni incompatibili, e quindi forme incompatibili. Se si prova a eseguire il codice, si otterrà 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)
question mark

Seleziona tutti gli array con forme compatibili:

Seleziona tutte le risposte corrette

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

Sezione 4. Capitolo 1
some-alt