Використання %lprun: усуньте «вузьке місце»
У попередній вправі ви профілювали функцію convert_units() і побачили, що розумний список new_hts може бути потенційним «вузьким місцем». Ви помітили, що розумний список new_wts також займав подібний відсоток часу виконання? Це свідчить про те, що варто створювати об'єкти new_hts і new_wts іншим способом.
Оскільки зріст і вага кожного героя збережені в масиві numpy, можна використати поширення масиву (array broadcasting), а не розумні списки, щоб конвертувати зрости й ваги. Це реалізовано у функції нижче:
def convert_units_broadcast(heroes, heights, weights):
# Поширення масиву замість розумного списку
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
Завантажте пакет line_profiler у вашу сесію IPython. Потім використайте %lprun, щоб профілювати функцію convert_units_broadcast() на даних про ваших супергероїв. Функцію convert_units_broadcast(), список heroes, масив hts і масив wts уже завантажено у вашу сесію. Після того як завершите кодування, дайте відповідь на запитання:
Який відсоток часу припадає на рядок коду з поширенням масиву new_hts відносно загального часу, витраченого у функції convert_units_broadcast()?
Ця вправа є частиною курсу
Ефективне написання коду Python
Практична інтерактивна вправа
Перетворіть теорію на практику за допомогою однієї з наших інтерактивних вправ
Почати вправу