Broadcasting e operazioni vettorializzate
Come funziona il broadcasting, operazioni elemento per elemento ed evitamento dei cicli tramite la vettorializzazione.
Broadcasting e operazioni vettorializzate è una lezione Learn AI with Python 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 Learn AI with Python, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Learn AI with Python include 4 lezioni in totale.
Perché vettorializzare?
NumPy opera su interi array alla velocità del C. Sostituire i cicli Python con espressioni sugli array, una tecnica chiamata vettorializzazione, è spesso da 10 a 100 volte più veloce.
Operazioni elemento per elemento
Gli operatori aritmetici vengono applicati elemento per elemento quando le forme coincidono. Non è necessario alcun ciclo.
import numpy as np
a = np.array([1, 2, 3])
b = np.array([10, 20, 30])
print(a + b) # [11 22 33]
print(a * b) # [10 40 90]Broadcasting di uno scalare
Un'operazione tra un array e uno scalare applica lo scalare a ogni elemento. Lo scalare viene sottoposto a "broadcast" sull'intero array.
a = np.array([1, 2, 3, 4])
print(a * 10) # [10 20 30 40]
print(a + 100) # [101 102 103 104]Che cos'è il broadcasting?
Il broadcasting consente a NumPy di combinare array di forme diverse estendendo virtualmente quello più piccolo, senza copiare la memoria.
La regola del broadcasting
Confronti le forme a partire dalla dimensione finale (quella più a destra). Due dimensioni sono compatibili quando sono uguali oppure quando una delle due è 1. Una dimensione di ampiezza 1 viene estesa fino a coincidere.
# (3, 4) with (4,) -> compatible (trailing 4 matches)
# (3, 4) with (3, 1) -> compatible (1 stretches to 4)
# (3, 4) with (3,) -> ERROR (trailing 4 vs 3)Broadcasting di un vettore riga
Un array 1D la cui lunghezza coincide con il numero di colonne viene sommato a ogni riga.
m = np.array([[1, 2, 3], [4, 5, 6]])
row = np.array([10, 20, 30])
print(m + row)
# [[11 22 33]
# [14 25 36]]Broadcasting di un vettore colonna
Rimodelli un vettore come colonna (shape (n,1)) in modo che venga sottoposto a broadcasting sulle colonne anziché sulle righe.
col = np.array([[100], [200]]) # shape (2, 1)
print(m + col)
# [[101 102 103]
# [204 205 206]]Centrare i dati (uso reale)
Sottrarre la media di ogni colonna centra ciascuna caratteristica: è una comune fase di preprocessing eseguita con una sola riga che sfrutta il broadcasting.
data = np.array([[1.0, 10.0], [2.0, 20.0], [3.0, 30.0]])
centered = data - data.mean(axis=0)
print(centered)
# columns now have mean 0Funzioni universali (ufunc)
NumPy include rapide funzioni matematiche elemento per elemento chiamate ufuncs: np.sqrt, np.log, np.exp e altre. Sono vettorializzate e consapevoli del broadcasting.
a = np.array([1.0, 4.0, 9.0, 16.0])
print(np.sqrt(a)) # [1. 2. 3. 4.]
print(np.log(a)) # natural log of each element
print(np.exp([0, 1])) # [1. 2.71828183]Velocità: ciclo vs vettorializzazione
Lo stesso calcolo è molto più veloce quando viene vettorializzato. Utilizzi %timeit per percepire la differenza su un milione di elementi.
big = np.arange(1000000, dtype=float)
# Slow Python loop:
# %timeit [x*x for x in big]
# Fast vectorized:
%timeit big * big # typically tens of times fasterCombinare la vettorializzazione
Combini ufunc e operazioni aritmetiche per esprimere direttamente le formule. In questo modo calcola una curva gaussiana senza cicli.
x = np.linspace(-3, 3, 7)
y = np.exp(-x**2 / 2)
print(np.round(y, 3))Verifica rapida
Metta alla prova la Sua comprensione del broadcasting.
Riepilogo
Elementi essenziali della vettorializzazione:
- Le operazioni elemento per elemento evitano i cicli Python ed eseguono alla velocità del C
- Il broadcasting allinea le dimensioni finali; le ampiezze devono coincidere oppure essere 1
- Utilizzi vettori colonna (n,1) per applicare il broadcasting lungo le colonne
- ufunc:
np.sqrt,np.log,np.exp - Centri i dati con
data - data.mean(axis=0)
Domande Frequenti
La lezione «Broadcasting e operazioni vettorializzate» è gratuita?
Sì — il testo completo di «Broadcasting e operazioni vettorializzate» è 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 Learn AI with Python, passa a CoddyKit PRO. Il corso Learn AI with Python include 4 lezioni in totale.
Cosa imparerò in «Broadcasting e operazioni vettorializzate»?
Come funziona il broadcasting, operazioni elemento per elemento ed evitamento dei cicli tramite la vettorializzazione. Eserciti Learn AI with Python 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 Learn AI with Python?
Non è richiesta alcuna esperienza precedente. Learn AI with Python 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 «Broadcasting e operazioni vettorializzate»?
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 Learn AI with Python?
Sì. Ogni lezione Learn AI with Python 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
- Creazione e proprietà degli array
- Indicizzazione, slicing e fancy indexing
- Broadcasting e operazioni vettorializzate
- Algebra lineare con NumPy