1. Learn
  2. /
  3. Courses
  4. /
  5. Psaní efektivního kódu v Pythonu

Connected

Exercise

Použití %mprun: BMI superhrdinů

Chceš vypočítat index tělesné hmotnosti (BMI) pro vybraný vzorek superhrdinů. BMI se vypočítá podle následujícího vzorce:

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

Do tvé session byl načten náhodný vzorek 25 000 superhrdinů jako pole sample_indices. Tento vzorek obsahuje seznam indexů, které odpovídají indexům jednotlivých superhrdinů vybraných ze seznamu heroes.

Funkce calc_bmi_lists byla také vytvořena a uložena do souboru bmi_lists.py. Pro přehlednost je zobrazena níže:

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

Všimni si, že tato funkce provádí všechny výpočty pomocí list comprehension (odtud název calc_bmi_lists()). Ponořte se do této funkce hlouběji a analyzuj paměťovou náročnost výpočtů prováděných pomocí seznamů:

  • Načti balíček memory_profiler do své IPython session.
  • Importuj calc_bmi_lists z modulu bmi_lists.
  • Jakmile budeš mít oba kroky hotové, použij %mprun k profilování funkce calc_bmi_lists() na datech svých superhrdinů. Pole hts a wts jsou do tvé session již načtena.

Až budeš s kódem hotov/a, odpověz na následující otázku:

Kolik paměti spotřebují řádky s list comprehension ve funkci calc_bmi_lists()? (tj. jaký je celkový součet sloupce Increment pro tyto čtyři řádky kódu?)

Instructions

50 XP

Possible answers