Engpässe mit %lprun beheben
In der letzten Übung hast du die Funktion convert_units() analysiert und gesehen, dass die Listenabstraktion new_hts ein möglicher Engpass sein könnte. Hast du bemerkt, dass die Listenabstraktion new_wts auch einen ähnlichen Anteil an der Laufzeit hatte? Das ist ein Hinweis darauf, dass du die Objekte new_hts und new_wts vielleicht mit einer anderen Technik erstellen solltest.
Da die Größe und das Gewicht jedes Helden in einem numpy-Array gespeichert sind, kannst du Array Broadcasting anstelle von Listenabstraktion verwenden, um Größe und Gewicht der Helden umzuwandeln. Das wurde in der folgenden Funktion umgesetzt:
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
Lade das Paket line_profiler in deine IPython-Session. Nutze anschließend %lprun, um die Funktion convert_units_broadcast(), die auf deine Superhelden-Daten angewendet wird, zu analysieren. Die Funktion convert_units_broadcast(), die Liste heroes, und die Arrays hts und wts wurden in deine Session geladen. Wenn du mit dem Programmieren fertig bist, beantworte bitte die folgende Frage:
Wie viel Prozent der Zeit wird vom Code new_hts im Vergleich zur Gesamtzeit verbraucht, die für die Funktion convert_units_broadcast() benötigt wird?
Diese Übung ist Teil des Kurses
Effizienten Python-Code schreiben
Interaktive Übung
In dieser interaktiven Übung kannst du die Theorie in die Praxis umsetzen.
Übung starten