1. Learn
  2. /
  3. Courses
  4. /
  5. 効率的なPythonコードの書き方

Connected

Exercise

Using %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 をインポートします。
  • 上記の手順を完了したら、%mprun を使ってスーパーヒーローのデータに対して動作する calc_bmi_lists() 関数をプロファイルします。 hts 配列と wts 配列はすでにセッションに読み込まれています。

コーディングが終わったら、次の質問に答えてください。

calc_bmi_lists() 関数のリスト内包表記の行は、合計でどれくらいのメモリを消費しますか?(つまり、これら4行の Increment 列の合計はいくつですか?)

Instructions

50 XP

Possible answers