Usando %mprun: Hero BMI 2.0
Vamos ver se o uso de uma abordagem diferente para calcular os IMCs pode economizar um pouco de 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 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
Começar o exercício