Usare %mprun: Hero BMI 2.0
Vediamo se usare un approccio diverso per calcolare i BMI può risparmiare memoria. Se ricordi, l’altezza e il peso di ciascun eroe sono memorizzati in un array numpy. Questo significa che puoi sfruttare l’indicizzazione degli array e il broadcasting di NumPy per eseguire i calcoli. È stata creata una funzione chiamata calc_bmi_arrays e salvata in un file dal titolo bmi_arrays.py. Per comodità, è mostrata qui sotto:
def calc_bmi_arrays(sample_indices, hts, wts):
# Gather sample heights and weights as arrays
s_hts = hts[sample_indices]
s_wts = wts[sample_indices]
# Convert heights from cm to m and square with broadcasting
s_hts_m_sqr = (s_hts / 100) ** 2
# Calculate BMIs as an array using broadcasting
bmis = s_wts / s_hts_m_sqr
return bmis
Nota che questa funzione esegue tutti i calcoli necessari usando array.
Vediamo se questo nuovo approccio basato sugli array riduce l’impronta di memoria:
- Carica il pacchetto
memory_profilernella tua sessione IPython. - Importa
calc_bmi_arraysdabmi_arrays. - Una volta completati i passaggi precedenti, usa
%mprunper profilare la funzionecalc_bmi_arrays()sui dati dei tuoi supereroi. Gli arraysample_indices,htsewtssono già stati caricati nella tua sessione.
Dopo aver terminato di scrivere il codice, rispondi alla seguente domanda:
Quanta memoria consumano le righe di codice di indicizzazione degli array e broadcasting nella funzione calc_bmi_array()? (cioè qual è la somma totale della colonna Increment per queste quattro righe di codice?)
Questo esercizio fa parte del corso
Scrivere codice Python efficiente
Esercizio pratico interattivo
Passa dalla teoria alla pratica con uno dei nostri esercizi interattivi
Inizia esercizio