Utilisation de %lprun : résolution du goulot d'étranglement
Dans l'exercice précédent, vous avez profilé la fonction ` convert_units()
et constaté que la compréhension de liste
new_hts
` pouvait constituer un goulot d'étranglement potentiel. Avez-vous remarqué que la compréhension de liste « new_wts
» représentait également un pourcentage similaire du temps d'exécution ? Cela indique qu'il serait peut-être préférable de créer les objets new_hts
et new_wts
en utilisant une technique différente.
Étant donné que la taille et le poids de chaque héros sont stockés dans un tableau d'numpy
, vous pouvez utiliser la diffusion de tableaux plutôt que la compréhension de listes pour convertir les tailles et les poids. Ceci a été implémenté dans la fonction ci-dessous :
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
Veuillez charger le package line_profiler
dans votre session IPython. Ensuite, veuillez utiliser %lprun
pour profiler la fonction d'convert_units_broadcast()
agissant sur les données relatives à vos super-héros. Les fonctions convert_units_broadcast()
, heroes
list, hts
array et wts
array ont été chargées dans votre session. Une fois le codage terminé, veuillez répondre à la question suivante :
Quel pourcentage du temps est consacré à la ligne de code de diffusion du tableau d'new_hts
s par rapport au temps total passé dans la fonction d'convert_units_broadcast()
?
Cet exercice fait partie du cours
Écrire du code Python efficace
Exercice interactif pratique
Passez de la théorie à la pratique avec l’un de nos exercices interactifs
