Aan de slagGa gratis aan de slag

Gebruik %lprun: los de bottleneck op

In de vorige oefening heb je de functie convert_units() geprofiled en gezien dat de list comprehension voor new_hts een mogelijke bottleneck was. Viel je ook op dat de list comprehension voor new_wts voor een vergelijkbaar percentage van de looptijd zorgde? Dat is een teken dat je new_hts en new_wts beter op een andere manier kunt aanmaken.

Omdat de lengte en het gewicht van elke held in een numpy-array zijn opgeslagen, kun je array-broadcasting gebruiken in plaats van list comprehensions om de lengtes en gewichten om te zetten. Dit is geïmplementeerd in de onderstaande functie:

def convert_units_broadcast(heroes, heights, weights):

    # Array-broadcasting in plaats van 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

Laad het pakket line_profiler in je IPython-sessie. Gebruik daarna %lprun om de functie convert_units_broadcast() te profileren op je superheldendata. De functie convert_units_broadcast(), de lijst heroes, en de arrays hts en wts zijn al in je sessie geladen. Beantwoord na het coderen de volgende vraag:

Welk percentage van de tijd wordt besteed aan de regel met array-broadcasting voor new_hts, relatief aan de totale tijd in de functie convert_units_broadcast()?

Deze oefening maakt deel uit van de cursus

Efficiënte Python-code schrijven

Cursus bekijken

Praktische interactieve oefening

Zet theorie om in actie met een van onze interactieve oefeningen.

Begin met trainen