Usando %mprun: Hero BMI 2.0
Vamos ver se o uso de uma abordagem diferente para calcular os IMCs pode economizar memória. Se você se lembra, a altura e o peso de cada herói são armazenados em uma matriz numpy
. Isso significa que você pode usar os práticos recursos de indexação e transmissão de matriz do NumPy para realizar seus cálculos. Uma função chamada calc_bmi_arrays
foi criada e salva em um arquivo intitulado bmi_arrays.py
. Para sua conveniência, ele é exibido abaixo:
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
Observe que essa função realiza todos os cálculos necessários usando matrizes.
Vamos ver se essa abordagem de matriz atualizada diminui o espaço de memória que você ocupa:
- Carregue o pacote
memory_profiler
em sua sessão do IPython. - Importe
calc_bmi_arrays
debmi_arrays
. - Depois que você concluir as etapas acima, use
%mprun
para criar o perfil da funçãocalc_bmi_arrays()
que atua nos dados dos super-heróis. A matrizsample_indices
, a matrizhts
e a matrizwts
foram carregadas em sua sessão.
Depois que você terminar de codificar, responda à seguinte pergunta:
Quanta memória as linhas de código de indexação e transmissão de matriz consomem na função calc_bmi_array()
? (Ou seja, qual é a soma total da coluna Increment
para essas quatro linhas de código?)
Este exercício faz parte do curso
Como escrever um código Python eficiente
Exercício interativo prático
Transforme a teoria em ação com um de nossos exercícios interativos
