1. 학습
  2. /
  3. 강의
  4. /
  5. 효율적인 Python 코드 작성

Connected

연습 문제

%mprun 사용하기: 히어로 BMI

선정된 히어로 표본에 대해 체질량지수(BMI)를 계산해 보려고 합니다. BMI는 아래 공식을 사용해 계산해요:

BMI = mass(kg) / height(m)^2

무작위로 선택된 슈퍼히어로 25,000명의 표본이 sample_indices라는 배열로 세션에 로드되어 있어요. 이 표본은 heroes 리스트에서 선택된 각 슈퍼히어로의 인덱스에 대응하는 인덱스 목록입니다.

calc_bmi_lists라는 함수도 만들어져 bmi_lists.py 파일에 저장되어 있어요. 편의를 위해 아래에 표시합니다:

def calc_bmi_lists(sample_indices, hts, wts):

    # Gather sample heights and weights as lists
    s_hts = [hts[i] for i in sample_indices]
    s_wts = [wts[i] for i in sample_indices]

    # Convert heights from cm to m and square with list comprehension
    s_hts_m_sqr = [(ht / 100) ** 2 for ht in s_hts]

    # Calculate BMIs as a list with list comprehension
    bmis = [s_wts[i] / s_hts_m_sqr[i] for i in range(len(sample_indices))]

    return bmis

이 함수는 모든 필요한 계산을 리스트 컴프리헨션으로 수행한다는 점에 주목하세요(그래서 이름이 calc_bmi_lists()예요). 이 함수를 좀 더 자세히 살펴보고, 리스트를 사용해 계산할 때의 메모리 사용량을 분석해 보세요:

  • memory_profiler 패키지를 IPython 세션에 로드하세요.
  • bmi_lists에서 calc_bmi_lists를 가져오세요.
  • 위 단계를 마쳤다면, 슈퍼히어로 데이터에 대해 calc_bmi_lists() 함수를 프로파일링하기 위해 %mprun을 사용하세요. hts 배열과 wts 배열은 이미 세션에 로드되어 있어요.

코딩을 마친 후, 아래 질문에 답해 주세요:

calc_bmi_lists() 함수에서 리스트 컴프리헨션으로 작성된 코드 줄들은 얼마나 많은 메모리를 사용하나요? (즉, 이 네 줄에 대해 Increment 열의 합계는 얼마인가요?)

지침

50 XP

가능한 답변