1. Learn
  2. /
  3. Курси
  4. /
  5. Ефективне написання коду Python

Connected

вправа

Використання %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()?

Інструкції

50 XP

Можливі відповіді