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_profileri din IPython-session. - Importera
calc_bmi_arraysfrånbmi_arrays. - När du har gjort ovanstående steg använder du
%mprunför att profilera funktionencalc_bmi_arrays()på din superhjältedata. Arrayensample_indices, arrayenhtsoch arrayenwtshar 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
Interaktiv övning med praktiskt arbete
Gör teori till handling med en av våra interaktiva övningar
Starta övningen