Broadcasting degli array con NumPy
Il broadcasting di NumPy consente di eseguire operazioni aritmetiche tra array di dimensioni diverse senza dover esplicitamente duplicare i dati, migliorando così l'efficienza e la leggibilità del codice.
In questa pagina, esploreremo in dettaglio cosa sia il broadcasting, come funziona e come puoi utilizzarlo per scrivere codice più efficace e performante.
Il termine "broadcasting" si riferisce alla capacità di NumPy di "estendere" automaticamente le dimensioni di array più piccoli per renderli compatibili con array più grandi durante le operazioni aritmetiche. In altre parole, quando esegui un'operazione tra due array di dimensioni diverse, NumPy tenta di replicare i dati degli array più piccoli lungo le dimensioni necessarie per allinearsi con quelli più grandi, senza effettivamente duplicare i dati in memoria.
Questa caratteristica consente di evitare cicli espliciti e operazioni ripetitive, rendendo il codice più conciso e spesso più veloce.
Esempi di broadcasting degli array NumPy
Vediamo alcuni esempi pratici per chiarire come funziona il broadcasting in NumPy.
import numpy as np
arr = np.array([1, 2, 3])
scalar = 5
result = arr + scalar
print(result) # [6 7 8]
In questo esempio, lo scalare viene "broadcasted" lungo l'intero array, comportandosi come se fosse un array di lunghezza 3 con tutti i valori uguali a 5. Questo consente di sommare il valore scalare a ciascun elemento dell'array senza dover usare un ciclo.
import numpy as np
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([10, 20, 30])
result = arr1 + arr2
print(result)
'''
[[11 22 33]
[14 25 36]]
'''
Qui, arr2 viene esteso (broadcasted) per avere la stessa forma di arr1, consentendo una somma elemento per elemento tra i due array. In pratica, arr2 si comporta come se fosse [[10, 20, 30], [10, 20, 30]].
Esempio di operazioni su array con dimensioni incompatibili
import numpy as np
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([1, 2])
# Questo solleverà un errore
result = arr1 + arr2
In questo esempio, l'operazione fallirà perché le dimensioni degli array non sono compatibili per il broadcasting. Infatti, arr1 ha una forma di (2, 3) mentre arr2 ha una forma di (2,), e non possono essere allineati automaticamente secondo le regole di broadcasting.