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?
To ćwiczenie jest częścią kursu
Wydajny kod w Pythonie
Interaktywne ćwiczenie praktyczne
Przekształć teorię w praktykę dzięki jednemu z naszych interaktywnych ćwiczeń
Rozpocznij ćwiczenie