Usar %lprun: corrigir o gargalo
No exercício anterior, você traçou o perfil da função convert_units() e viu que a compreensão da lista new_hts poderia ser um gargalo em potencial. Você notou que a compreensão da lista new_wts também foi responsável por uma porcentagem semelhante do tempo de execução? Isso é uma indicação de que você pode querer criar os objetos new_hts e new_wts usando uma técnica diferente.
Como a altura e o peso de cada herói são armazenados em uma matriz numpy, você pode usar a transmissão de matriz em vez da compreensão de lista para converter as alturas e os pesos. Isso foi implementado na função abaixo:
def convert_units_broadcast(heroes, heights, weights):
# Array broadcasting instead of list comprehension
new_hts = heights * 0.39370
new_wts = weights * 2.20462
hero_data = {}
for i,hero in enumerate(heroes):
hero_data[hero] = (new_hts[i], new_wts[i])
return hero_data
Carregue o pacote line_profiler em sua sessão do IPython. Em seguida, use o site %lprun para traçar o perfil da função convert_units_broadcast() que atua nos dados de seus super-heróis. A função convert_units_broadcast(), a lista heroes, a matriz hts e a matriz wts foram carregadas em sua sessão. Depois que você terminar de codificar, responda à seguinte pergunta:
Que porcentagem de tempo você gasta na linha de código de transmissão da matriz new_hts em relação à quantidade total de tempo gasto na função convert_units_broadcast()?
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