Regole di broadcasting
Comprenda le regole di broadcasting di NumPy per poter sommare un array 1D a ogni riga di un array 2D senza replicarlo esplicitamente.
Regole di broadcasting è una lezione Pandas & NumPy Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Pandas & NumPy Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Pandas & NumPy Academy include 4 lezioni in totale.
Il problema risolto dal broadcasting
Il broadcasting consente a NumPy di combinare array con forme diverse ma compatibili senza copiare i dati: quello più piccolo viene esteso per adattarsi a quello più grande.
import numpy as np
# Adding a scalar to an array is the simplest broadcast
a = np.array([1, 2, 3])
print(a + 10) # [11 12 13]
# Scalar 10 is 'broadcast' to shape (3,)Regola 1 del broadcasting: anteporre 1
NumPy allinea le forme partendo da destra. Se un array ha meno dimensioni, aggiunge 1 a sinistra: un array (3,) si comporta quindi come (1, 3) accanto a un array (4, 3).
import numpy as np
m = np.ones((4, 3))
v = np.array([10, 20, 30]) # shape (3,) -> treated as (1, 3)
result = m + v # shape (4, 3)
print(result)
# [[11. 21. 31.]
# [11. 21. 31.]
# [11. 21. 31.]
# [11. 21. 31.]]Regola 2 del broadcasting: estendere le dimensioni di grandezza 1
Qualsiasi dimensione di grandezza 1 può essere estesa fino a corrispondere a quella dell'altro array, senza copiare realmente i dati. Entrambi gli array possono estendere contemporaneamente le proprie dimensioni di grandezza 1.
import numpy as np
# (3, 1) + (1, 4) --> (3, 4)
col = np.array([[1], [2], [3]]) # shape (3, 1)
row = np.array([[10, 20, 30, 40]]) # shape (1, 4)
print((col + row).shape) # (3, 4)
print(col + row)Regola 3 del broadcasting: forme incompatibili
Se due dimensioni non sono uguali e nessuna delle due è 1, il broadcasting fallisce con un ValueError. Controllare prima le forme produce un errore chiaro, non un bug silenzioso.
import numpy as np
a = np.ones(3)
b = np.ones(4)
try:
a + b
except ValueError as e:
print(e)
# operands could not be broadcast together with shapes (3,) (4,)Pratica: sottrarre la media delle colonne
Un'operazione classica consiste nel sottrarre la media di ogni colonna da ogni riga per centrare i dati. Con keepdims=True, la media mantiene una forma compatibile con il broadcasting.
import numpy as np
data = np.array([[1., 2., 3.],
[4., 5., 6.],
[7., 8., 9.]])
col_mean = data.mean(axis=0) # shape (3,)
centred = data - col_mean # broadcast along axis 0
print(centred)
# [[-3. -3. -3.]
# [ 0. 0. 0.]
# [ 3. 3. 3.]]Pratica: normalizzazione delle righe
Per fare in modo che la somma di ogni riga sia 1, divida per la somma della riga. Usi keepdims=True affinché la somma mantenga la forma (n, 1) e venga sottoposta a broadcasting sulle colonne.
import numpy as np
m = np.array([[1., 2., 3.],
[4., 5., 6.]])
row_sums = m.sum(axis=1, keepdims=True) # shape (2, 1)
normed = m / row_sums
print(normed.round(3))
# [[0.167 0.333 0.5 ]
# [0.267 0.333 0.4 ]]Prodotti esterni tramite broadcasting
Ridimensioni un array a (n, 1) e un altro a (1, m), quindi li moltiplichi: il broadcasting costruisce per Lei l'intera matrice del prodotto esterno, senza bisogno di cicli.
import numpy as np
a = np.array([1, 2, 3])
b = np.array([10, 20, 30, 40])
outer = a[:, np.newaxis] * b[np.newaxis, :]
print(outer)
# [[ 10 20 30 40]
# [ 20 40 60 80]
# [ 30 60 90 120]]Broadcasting con array tridimensionali
Il broadcasting funziona con un numero qualsiasi di dimensioni. Un batch di immagini con forma (100, 28, 28) può essere centrato usando una media per pixel con forma (1, 28, 28): NumPy estende la dimensione 1.
import numpy as np
batch = np.random.rand(100, 28, 28) # 100 images
pixel_mean = batch.mean(axis=0, keepdims=True) # (1, 28, 28)
centred = batch - pixel_mean # (100, 28, 28)
print(centred.shape) # (100, 28, 28)np.broadcast_to per un'estensione esplicita
np.broadcast_to mostra esattamente il risultato del broadcasting, come vista in sola lettura e senza effettuare copie. È perfetta per visualizzare come si allineano le forme.
import numpy as np
a = np.array([1, 2, 3])
view = np.broadcast_to(a, (4, 3))
print(view)
# [[1 2 3]
# [1 2 3]
# [1 2 3]
# [1 2 3]]
print(view.flags.writeable) # FalseVisualizzare le forme compatibili
Una regola utile: allinei le forme partendo da destra e controlli ogni coppia. Sono compatibili se sono uguali o se una delle due è 1. Preveda le forme prima di eseguire il codice.
# Shape compatibility examples:
# (3, 4) + ( 4) -> (3, 4) OK: 4==4, 1 implied
# (3, 4) + (3, 1) -> (3, 4) OK: 4 vs 1, 3==3
# (2, 3, 4) + (3, 4) -> (2, 3, 4) OK
# (3, 4) + (3, ) -> ERROR: 4 vs 3
import numpy as np
print(np.zeros((3,4)).shape) # (3, 4)
print((np.zeros((3,4)) + np.zeros(4)).shape) # (3, 4)Errori comuni nel broadcasting
L'errore più comune nel broadcasting consiste nel dimenticare keepdims=True dopo un'aggregazione, causando un disallineamento delle forme. In caso di dubbi, stampi print(arr.shape) per capire cosa sta realmente accadendo.
import numpy as np
m = np.arange(6).reshape(2, 3)
row_max = m.max(axis=1) # shape (2,) NOT (2,1)
print(row_max.shape) # (2,)
# m - row_max -> ERROR: shapes (2,3) and (2,) misalign
row_max_col = row_max[:, np.newaxis] # shape (2, 1)
print((m - row_max_col).shape) # (2, 3) OKVerifica rapida
Verifichi la Sua comprensione delle regole di broadcasting di NumPy presentate in questa lezione.
Riepilogo della lezione
Ha capito! Il broadcasting estende le dimensioni di grandezza 1, confronta le forme partendo da destra e keepdims=True conserva gli assi affinché le operazioni siano allineate. Prossimo argomento: le maschere booleane.
Impara Python con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 30
- Lezioni
- 120
Domande Frequenti
La lezione «Regole di broadcasting» è gratuita?
Sì — il testo completo di «Regole di broadcasting» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Pandas & NumPy Academy, passa a CoddyKit PRO. Il corso Pandas & NumPy Academy include 4 lezioni in totale.
Cosa imparerò in «Regole di broadcasting»?
Comprenda le regole di broadcasting di NumPy per poter sommare un array 1D a ogni riga di un array 2D senza replicarlo esplicitamente. Eserciti Pandas & NumPy Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Pandas & NumPy Academy?
Non è richiesta alcuna esperienza precedente. Pandas & NumPy Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Regole di broadcasting»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Pandas & NumPy Academy?
Sì. Ogni lezione Pandas & NumPy Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Funzioni universali (ufunc)
- Funzioni di aggregazione
- Regole di broadcasting
- Mascheramento booleano e indicizzazione avanzata