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
