CLASSE TERZA • MODULO 3.3

Filtri e Matrici 2D

Selezionare dati, lavorare con tabelle e best practices

Il tuo percorso NumPy

1
2
3
4
Fondamenta
(Completato)
Statistiche
(Completato)
Filtri & 2D
(Questo modulo)
Per l'AI
(Modulo 3.4)

🔍 Filtri Logici: Selezionare Dati con Condizioni

Questa è una delle funzionalità più potenti di NumPy: selezionare solo alcuni elementi di un array in base a una condizione.

Passo 1: Il confronto crea un array di True/False

import numpy as np
temperature = np.array([18, 22, 25, 15, 30, 28, 20, 35, 12, 27])
risultato = temperature > 25
print("temperature > 25:", risultato)
📝 Cosa succede dentro temperature > 25: 18 > 25? False 22 > 25? False 25 > 25? False (25 NON è maggiore di 25) 15 > 25? False 30 > 25? True 28 > 25? True 20 > 25? False 35 > 25? True 12 > 25? False 27 > 25? True Risultato: [False, False, False, False, True, True, False, True, False, True]

Questo array di True/False si chiama maschera booleana.

Passo 2: Usare la maschera per filtrare

# Modo COMPATTO (tutto in una riga):
temp_calde = temperature[temperature > 25]
print("Calde:", temp_calde)  # [30, 28, 35, 27]

🎨 Visualizzazione del filtro

Verdi = passano il filtro (> 25):

18
22
25
15
30
28
20
35
12
27

Dopo il filtro:

30
28
35
27

Passo 3: Contare quanti soddisfano la condizione

n_calde = np.sum(temperature > 25)
print(f"Giorni caldi: {n_calde}")  # 4

Passo 4: Combinare più condizioni

# 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!

Passo 5: Sostituire valori con np.where()

temp_limitate = np.where(temperature > 30, 30, temperature)
print("Limitate:", temp_limitate)

Passo 6: Classificare con np.select()

condizioni = [
    temperature < 15,
    (temperature >= 15) & (temperature < 25),
    temperature >= 25
]
etichette = ["Freddo", "Mite", "Caldo"]
classificazione = np.select(condizioni, etichette)
print("Classificazione:", classificazione)

🧩 Le Matrici (Array 2D)

NumPy può gestire tabelle con righe e colonne, proprio come un foglio Excel.

Come creare una matrice

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)  # 2

🎨 Visualizzazione

Col 0
Col 1
Col 2
Col 3
Riga 0
7
8
6
9
Riga 1
8
7
7.5
8.5
Riga 2
6
6.5
7
7

Leggere valori

print(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

🔍 I due punti : significano "tutti"

voti_classe[:, 0] = "TUTTE le righe, solo colonna 0"

Calcoli con axis

# 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 →)

Matrici speciali

# 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 uni

✨ Best Practices

Evita i loop: usa le operazioni di NumPy

❌ Lento (con loop)
result = []
for x in array:
    result.append(x * 2)
✅ Veloce (senza loop)
result = array * 2
# 100x piu veloce!

Usa le funzioni built-in di NumPy

❌ Ricalcolare a mano
somma = 0
for x in array:
    somma += x
media = somma / len(array)
✅ Funzione built-in
media = array.mean()
# Semplice e veloce!

✅ Checklist

💪 ESERCIZI

Es. 1: Analisi Meteo Facile

Temperature: np.array([18,22,25,19,23,21,20,35,12,27,26,24,28,17,16])

  • Quanti giorni caldi (>25)?
  • Classifica con np.select(): freddo/mite/caldo

Es. 2: Tabella Studenti Medio

Crea matrice 4x3, calcola medie per studente e materia, filtra studenti con media ≥ 7

Es. 3: Matrix Challenge Avanzato

Due matrici 3x3 casuali: calcola A+B, A*B, trova max per riga, crea C = np.where(A>B, A, B)

🚀 Pronto per l'AI?

← Torna al 3.2Vai al Modulo 3.4: NumPy per l'AI →