IniziaInizia gratis

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_profiler nella tua sessione IPython.
  • Importa calc_bmi_arrays da bmi_arrays.
  • Una volta completati i passaggi precedenti, usa %mprun per profilare la funzione calc_bmi_arrays() sui dati dei tuoi supereroi. Gli array sample_indices, hts e wts sono 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

Visualizza il corso

Esercizio pratico interattivo

Passa dalla teoria alla pratica con uno dei nostri esercizi interattivi

Inizia esercizio