NumPy
A cosa serve NumPy
Sezione intitolata “A cosa serve NumPy”Le liste Python sono sufficienti in molti casi. Per calcoli matematici su migliaia o milioni di numeri, però, NumPy esegue le operazioni più rapidamente.
NumPy è usato da molte librerie scientifiche Python, tra cui pandas, matplotlib e scikit-learn.
Installazione e importazione
Sezione intitolata “Installazione e importazione”pip install numpyPer convenzione, NumPy si importa sempre con il soprannome np:
import numpy as npGli array di NumPy
Sezione intitolata “Gli array di NumPy”La struttura centrale di NumPy è l’array (ndarray), simile a una lista Python ma pensata per i calcoli numerici.
import numpy as np
# Crea un array da una lista Pythona = np.array([1, 2, 3, 4, 5])print(a) # [1 2 3 4 5]print(type(a)) # <class 'numpy.ndarray'>print(a.dtype) # int64: il tipo dei dati (tutti interi a 64 bit)print(a.shape) # (5,) è la forma: 5 elementi in una dimensione
# Crea una matrice (array a due dimensioni)m = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])print(m)print(m.shape) # (3, 3): 3 righe, 3 colonneCreare array già pronti
Sezione intitolata “Creare array già pronti”import numpy as np
print(np.zeros(5)) # [0. 0. 0. 0. 0.]: cinque zeriprint(np.ones(4)) # [1. 1. 1. 1.]: quattro uniprint(np.zeros((2, 3))) # matrice 2×3 di zeriprint(np.eye(3)) # matrice identità 3×3 (uno sulla diagonale)print(np.arange(0, 10, 2)) # [0 2 4 6 8]: come range(), ma per arrayprint(np.linspace(0, 1, 5)) # [0. 0.25 0.5 0.75 1.]: 5 punti equidistanti tra 0 e 1print(np.random.rand(3)) # 3 numeri decimali casuali tra 0 e 1La potenza delle operazioni vettoriali
Sezione intitolata “La potenza delle operazioni vettoriali”Con una lista Python dovresti usare un ciclo per moltiplicare ogni elemento per 2. Con NumPy l’operazione si applica all’intero array in una volta sola:
import numpy as np
a = np.array([1, 2, 3, 4, 5])
# Operazioni su tutti gli elementi, senza scrivere cicli!print(a + 10) # [11 12 13 14 15]print(a * 2) # [ 2 4 6 8 10]print(a ** 2) # [ 1 4 9 16 25]print(a > 3) # [False False False True True]
# Operazioni tra due array (elemento per elemento)b = np.array([10, 20, 30, 40, 50])print(a + b) # [11 22 33 44 55]print(a * b) # [ 10 40 90 160 250]Questo approccio si chiama vettorializzazione: NumPy applica l’operazione agli elementi senza un ciclo scritto dall’utente.
Funzioni matematiche integrate
Sezione intitolata “Funzioni matematiche integrate”import numpy as np
a = np.array([1, 4, 9, 16, 25])
print(np.sqrt(a)) # [1. 2. 3. 4. 5.]: radice quadrata di ogni elementoprint(np.sum(a)) # 55: somma di tutti gli elementiprint(np.mean(a)) # 11.0: mediaprint(np.min(a)) # 1: valore minimoprint(np.max(a)) # 25: valore massimoprint(np.std(a)) # deviazione standardAccedere agli elementi
Sezione intitolata “Accedere agli elementi”import numpy as np
m = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(m[0]) # [1 2 3] ← prima riga interaprint(m[1, 2]) # 6 ← riga 1, colonna 2print(m[:, 0]) # [1 4 7] ← tutta la colonna 0print(m[0:2, 1:3]) # [[2 3] [5 6]] ← un sotto-blocco (righe 0-1, colonne 1-2)NumPy vs liste Python: la differenza di velocità
Sezione intitolata “NumPy vs liste Python: la differenza di velocità”import numpy as npimport time
n = 1_000_000 # Un milione di numeri
# Metodo 1: lista Python con ciclolista = list(range(n))inizio = time.time()risultato = [x * 2 for x in lista]print(f"Lista Python: {time.time() - inizio:.3f} secondi")
# Metodo 2: array NumPyarray = np.arange(n)inizio = time.time()risultato = array * 2print(f"NumPy: {time.time() - inizio:.3f} secondi")Per le operazioni numeriche NumPy è tipicamente 10-100 volte più veloce delle liste Python. Su un milione di elementi la differenza è notevole.
Quando usare NumPy vs liste
Sezione intitolata “Quando usare NumPy vs liste”| Situazione | Usa… |
|---|---|
| Dati misti (stringhe, numeri, oggetti) | Lista Python |
| Calcoli matematici su molti numeri | NumPy |
| Semplice raccolta di elementi | Lista Python |
| Matrici, algebra lineare, statistiche | NumPy |
| Qualsiasi libreria scientifica (pandas, matplotlib) | NumPy (lo usano internamente) |