1. Learn
  2. /
  3. คอร์ส
  4. /
  5. Эффективный код на Python

Connected

แบบฝึกหัด

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

Давайте проверим, позволит ли другой подход к вычислению ИМТ сэкономить память. Напомним, что рост и вес каждого героя хранятся в массиве numpy. Это значит, что можно воспользоваться удобной индексацией массивов NumPy и broadcasting для выполнения вычислений. Функция calc_bmi_arrays уже создана и сохранена в файл bmi_arrays.py. Для удобства её код приведён ниже:

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

Обратите внимание: эта функция выполняет все вычисления, используя массивы.

Посмотрим, снижает ли обновлённый подход на основе массивов потребление памяти:

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

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

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

คำแนะนำ

50 XP

คำตอบที่เป็นไปได้