Использование %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 для этих четырёх строк кода?)
Это упражнение является частью курса
Эффективный код на Python
Практическое интерактивное упражнение
Превратите теорию в практику с помощью одного из наших интерактивных упражнений
Начать упражнение