IniziaInizia gratis

Usare %mprun: BMI degli eroi

Vuoi calcolare il body mass index (BMI) per un campione selezionato di supereroi. Il BMI può essere calcolato con la formula seguente:

BMI = mass(kg) / height(m)^2

Un campione casuale di 25.000 supereroi è stato caricato nella tua sessione come array chiamato sample_indices. Questo campione è un elenco di indici che corrispondono all'indice di ogni supereroe selezionato dalla lista heroes.

È stata inoltre creata una funzione chiamata calc_bmi_lists e salvata in un file dal titolo bmi_lists.py. Per comodità, è mostrata qui sotto:

def calc_bmi_lists(sample_indices, hts, wts):

    # Gather sample heights and weights as lists
    s_hts = [hts[i] for i in sample_indices]
    s_wts = [wts[i] for i in sample_indices]

    # Convert heights from cm to m and square with list comprehension
    s_hts_m_sqr = [(ht / 100) ** 2 for ht in s_hts]

    # Calculate BMIs as a list with list comprehension
    bmis = [s_wts[i] / s_hts_m_sqr[i] for i in range(len(sample_indices))]

    return bmis

Nota che questa funzione esegue tutti i calcoli necessari usando list comprehension (da cui il nome calc_bmi_lists()). Esamina più a fondo questa funzione e analizza l'impatto sulla memoria nell'eseguire i calcoli usando liste:

  • Carica il pacchetto memory_profiler nella tua sessione IPython.
  • Importa calc_bmi_lists da bmi_lists.
  • Una volta completati i passaggi sopra, usa %mprun per profilare la funzione calc_bmi_lists() applicata ai dati dei tuoi supereroi. Gli array 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 con list comprehension nella funzione calc_bmi_lists()? (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