CommencerCommencer gratuitement

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

Afficher le cours

Exercice interactif pratique

Passez de la théorie à la pratique avec l’un de nos exercices interactifs

Commencer l’exercice