Kom igångKom igång gratis

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

Visa kurs

Interaktiv övning med praktiskt arbete

Gör teori till handling med en av våra interaktiva övningar

Starta övningen