Använda %lprun: åtgärda flaskhalsen
I föregående övning profilerade du funktionen convert_units() och såg att listomfattningen för new_hts potentiellt kunde vara en flaskhals. Noterade du att listomfattningen för new_wts stod för en liknande andel av körtiden? Det tyder på att du kanske bör skapa objekten new_hts och new_wts med en annan teknik.
Eftersom varje hjältes längd och vikt lagras i en numpy-array kan du använda array-broadcasting i stället för listomfattning för att konvertera längder och vikter. Det här har implementerats i funktionen nedan:
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
Ladda in paketet line_profiler i din IPython-session. Använd sedan %lprun för att profilera funktionen convert_units_broadcast() på dina superhjältedata. Funktionen convert_units_broadcast(), listan heroes, arrayen hts och arrayen wts har laddats in i din session. Svara på följande fråga när du är klar med koden:
Hur stor andel av tiden används för raden med array-broadcasting för new_hts, i förhållande till den totala körtiden för funktionen convert_units_broadcast()?
Den här övningen är en del av kursen
Att skriva effektiv Python-kod
Interaktiv övning med praktiskt arbete
Gör teori till handling med en av våra interaktiva övningar
Starta övningen