Kom igångKom igång gratis

Använd %mprun: Hjälte-BMI 2.0

Nu ska vi se om ett annat tillvägagångssätt för att beräkna BMI kan spara minne. Som du kanske minns lagras varje hjältes längd och vikt i en numpy-array. Det innebär att du kan använda NumPys arrayindexering och broadcasting för dina beräkningar. En funktion med namnet calc_bmi_arrays har skapats och sparats i en fil med namnet bmi_arrays.py. Den visas nedan för din bekvämlighet:

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

Observera att den här funktionen utför alla beräkningar med hjälp av arrayer.

Låt oss se om det uppdaterade array-baserade tillvägagångssättet minskar din minnesanvändning:

  • Läs in paketet memory_profiler i din IPython-session.
  • Importera calc_bmi_arrays från bmi_arrays.
  • När du har gjort ovanstående steg använder du %mprun för att profilera funktionen calc_bmi_arrays() på din superhjältedata. Arrayen sample_indices, arrayen hts och arrayen wts har laddats in i din session.

När du är klar med koden, svara på följande fråga:

Hur mycket minne förbrukar kodraderna för arrayindexering och broadcasting i funktionen calc_bmi_array()? (d.v.s. vad är den totala summan av kolumnen Increment för dessa fyra kodrader?)

Den här övningen är en del av kursen

Att skriva effektiv Python-kod

Visa kurs

Interaktiv övning med praktiskt arbete

Gör teori till handling med en av våra interaktiva övningar

Starta övningen