Selezionare dati, lavorare con tabelle e best practices
Questa è una delle funzionalità più potenti di NumPy: selezionare solo alcuni elementi di un array in base a una condizione.
import numpy as np
temperature = np.array([18, 22, 25, 15, 30, 28, 20, 35, 12, 27])
risultato = temperature > 25
print("temperature > 25:", risultato)Questo array di True/False si chiama maschera booleana.
# Modo COMPATTO (tutto in una riga):
temp_calde = temperature[temperature > 25]
print("Calde:", temp_calde) # [30, 28, 35, 27]Verdi = passano il filtro (> 25):
Dopo il filtro:
n_calde = np.sum(temperature > 25)
print(f"Giorni caldi: {n_calde}") # 4# Temperature tra 20 e 30 (ENTRAMBE vere)
miti = temperature[(temperature >= 20) & (temperature <= 30)]
print("Miti:", miti)
# Sotto 15 OPPURE sopra 30
estreme = temperature[(temperature < 15) | (temperature > 30)]
print("Estreme:", estreme)⚠️ Ogni condizione deve avere le sue parentesi!
✅ (temperature >= 20) & (temperature <= 30)
❌ temperature >= 20 & temperature <= 30 → Errore!
temp_limitate = np.where(temperature > 30, 30, temperature)
print("Limitate:", temp_limitate)condizioni = [
temperature < 15,
(temperature >= 15) & (temperature < 25),
temperature >= 25
]
etichette = ["Freddo", "Mite", "Caldo"]
classificazione = np.select(condizioni, etichette)
print("Classificazione:", classificazione)NumPy può gestire tabelle con righe e colonne, proprio come un foglio Excel.
voti_classe = np.array([
[7, 8, 6, 9], # Studente 0
[8, 7, 7.5, 8.5], # Studente 1
[6, 6.5, 7, 7] # Studente 2
])
print("Forma:", voti_classe.shape) # (3, 4)
print("Totale:", voti_classe.size) # 12
print("Dimensioni:", voti_classe.ndim) # 2print(voti_classe[0, 2]) # Riga 0, Col 2: 6
print(voti_classe[1]) # Tutta riga 1
print(voti_classe[:, 0]) # Tutta colonna 0: [7, 8, 6]
print(voti_classe[:2, :3]) # Prime 2 righe, prime 3 colonne: significano "tutti"voti_classe[:, 0] = "TUTTE le righe, solo colonna 0"
# Media per STUDENTE (per riga): axis=1
media_studenti = voti_classe.mean(axis=1)
# Media per MATERIA (per colonna): axis=0
media_materie = voti_classe.mean(axis=0)
# Media di TUTTO
media_totale = voti_classe.mean()💡 Trucco per ricordare axis:
axis=0 → righe si schiacciano, restano colonne (verticale ↓)
axis=1 → colonne si schiacciano, restano righe (orizzontale →)
# Doppie parentesi per le dimensioni!
tabella_zeri = np.zeros((3, 4)) # 3 righe, 4 colonne di zeri
tabella_uni = np.ones((2, 3)) # 2 righe, 3 colonne di uniresult = []
for x in array:
result.append(x * 2)result = array * 2
# 100x piu veloce!somma = 0
for x in array:
somma += x
media = somma / len(array)media = array.mean()
# Semplice e veloce!Temperature: np.array([18,22,25,19,23,21,20,35,12,27,26,24,28,17,16])
Crea matrice 4x3, calcola medie per studente e materia, filtra studenti con media ≥ 7
Due matrici 3x3 casuali: calcola A+B, A*B, trova max per riga, crea C = np.where(A>B, A, B)