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_profilerem sua sessão do IPython. - Importe
calc_bmi_arraysdebmi_arrays. - Depois que você concluir as etapas acima, use
%mprunpara criar o perfil da funçãocalc_bmi_arrays()que atua nos dados dos super-heróis. A matrizsample_indices, a matrizhtse a matrizwtsforam 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 exercicio faz parte do curso
Escrevendo código Python eficiente
exercicio interativo prático
Transforme teoria em prática com um dos nossos exercicio interativos
Iniciar exercicio