1. Uczyć się
  2. /
  3. Courses
  4. /
  5. Wydajny kod w Pythonie

Connected

Exercise

Użycie %lprun: eliminacja wąskiego gardła

W poprzednim ćwiczeniu profilowałeś funkcję convert_units() i zobaczyłeś, że wyrażenie listowe tworzące new_hts może być potencjalnym wąskim gardłem. Czy zauważyłeś, że wyrażenie listowe dla new_wts odpowiadało za podobny procent czasu wykonania? To sygnał, że warto rozważyć inne podejście do tworzenia obiektów new_hts i new_wts.

Ponieważ wzrost i waga każdego bohatera są przechowywane w tablicy numpy, możesz użyć broadcastingu tablic zamiast wyrażeń listowych do przeliczenia tych wartości. Takie rozwiązanie zostało zaimplementowane w poniższej funkcji:

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

Załaduj pakiet line_profiler do sesji IPython. Następnie użyj %lprun, aby sprofilować funkcję convert_units_broadcast() działającą na danych o superbohaterach. Funkcja convert_units_broadcast(), lista heroes, tablica hts oraz tablica wts zostały już załadowane do twojej sesji. Po zakończeniu pisania kodu odpowiedz na poniższe pytanie:

Jaki procent całkowitego czasu działania funkcji convert_units_broadcast() zajmuje wiersz kodu odpowiadający za broadcasting tablicy new_hts?

Instrukcje

50 XP

Możliwe odpowiedzi