1. Обучение
  2. /
  3. Курса
  4. /
  5. Эффективный код на Python

Connected

упражнение

Использование %mprun: ИМТ супергероев

Вы хотите рассчитать индекс массы тела (ИМТ) для выбранной выборки супергероев. ИМТ вычисляется по следующей формуле:

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

Случайная выборка из 25 000 супергероев загружена в вашу сессию в виде массива sample_indices. Это список индексов, соответствующих индексам каждого супергероя в списке heroes.

Также была создана функция calc_bmi_lists, сохранённая в файл bmi_lists.py. Для удобства она приведена ниже:

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

Обратите внимание, что все вычисления в этой функции выполняются с помощью генераторов списков (отсюда и название calc_bmi_lists()). Изучите эту функцию подробнее и проанализируйте потребление памяти при выполнении вычислений с использованием списков:

  • Загрузите пакет memory_profiler в вашу сессию IPython.
  • Импортируйте calc_bmi_lists из bmi_lists.
  • Выполнив указанные шаги, используйте %mprun для профилирования функции calc_bmi_lists() на данных о супергероях. Массивы hts и wts уже загружены в вашу сессию.

После завершения работы ответьте на следующий вопрос:

Сколько памяти потребляют строки кода с генераторами списков в функции calc_bmi_lists()? (то есть какова общая сумма значений столбца Increment для этих четырёх строк?)

Инструкции

50 XP

Возможные ответы