L'utilisation de %lprun permet de résoudre le problème du goulot d'étranglement.
Dans l'exercice précédent, vous avez analysé la fonction convert_units()
et constaté que la compréhension de la liste new_hts
pouvait constituer un goulot d'étranglement potentiel. Avez-vous remarqué que la compréhension de la liste new_wts
représentait également un pourcentage similaire du temps d'exécution ? Cela indique que vous pouvez créer les objets new_hts
et new_wts
à l'aide d'une technique différente.
Comme la taille et le poids de chaque héros sont stockés dans un tableau numpy
, vous pouvez utiliser la diffusion de tableau plutôt que la compréhension de liste pour convertir les tailles et les poids. Cela a été mis en œuvre 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
Chargez le paquet line_profiler
dans votre session IPython. Ensuite, utilisez %lprun
pour établir le profil de la fonction convert_units_broadcast()
agissant sur les données de vos super-héros. La fonction convert_units_broadcast()
, la liste heroes
, le tableau hts
et le tableau wts
ont été chargés dans votre session. Une fois le codage terminé, répondez à la question suivante :
Quel est le pourcentage de temps consacré à la ligne de code de diffusion du tableau new_hts
par rapport au temps total consacré à la fonction 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
