Použití %lprun: odstraňování úzkých míst
V předchozím cvičení jsi profiloval/a funkci convert_units() a zjistil/a, že list comprehension pro new_hts může být potenciálním úzkým místem. Všiml/a sis, že list comprehension pro new_wts zabíral podobné procento celkového času? To naznačuje, že by stálo za to vytvořit objekty new_hts a new_wts jiným způsobem.
Protože výška a váha každého hrdiny je uložena v poli numpy, můžeš místo list comprehension použít array broadcasting. Tato úprava je implementována v následující funkci:
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
Načti balíček line_profiler do své IPython session. Pak pomocí %lprun profiluj funkci convert_units_broadcast() na datech svých superhrdinů. Funkce convert_units_broadcast(), seznam heroes, pole hts a pole wts jsou do session již načteny. Až budeš hotov/a s kódem, odpověz na následující otázku:
Kolik procent času zabírá řádek s array broadcasting pro new_hts z celkového času stráveného ve funkci convert_units_broadcast()?
Toto cvičení je součástí kurzu
Psaní efektivního kódu v Pythonu
Interaktivní praktické cvičení
Proměňte teorii v praxi s jedním z našich interaktivních cvičení
Začít cvičení