1. Apprendre
  2. /
  3. Cours
  4. /
  5. Rédiger du code Python efficace

Connected

Exercice

Utiliser %lprun : corriger le 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 être un goulot d'étranglement. Avez-vous remarqué que la compréhension de liste new_wts représentait une proportion similaire du temps d'exécution ? Cela indique que vous devriez peut-être créer les objets new_hts et new_wts avec une autre technique.

Comme la taille et le poids de chaque héros sont stockés dans un tableau numpy, vous pouvez utiliser la diffusion de tableau (array broadcasting) plutôt que des compréhensions 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 module line_profiler dans votre session IPython. Ensuite, utilisez %lprun pour profiler la fonction convert_units_broadcast() appliquée à vos données de superhéros. La fonction convert_units_broadcast(), la liste heroes, ainsi que les tableaux hts et wts ont été chargés dans votre session. Après avoir terminé votre code, répondez à la question suivante :

Quel pourcentage du temps est consacré à la ligne de code de diffusion de tableau new_hts, par rapport au temps total passé dans la fonction convert_units_broadcast() ?

Instructions

50 XP

Réponses possibles