Using %mprun: ヒーローのBMI
選ばれたヒーローのサンプルについて、ボディマス指数(BMI)を計算したいとします。BMIは次の式で計算できます。

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 列の合計はいくつですか?)
この演習はコースの一部です
