Using %mprun: Hero BMI 2.0
別の方法でBMIを計算すると、メモリ使用量を節約できるか試してみましょう。覚えているとおり、各ヒーローの身長と体重は numpy 配列に保存されています。つまり、NumPyの便利な配列インデックスとブロードキャスト機能を使って計算できます。calc_bmi_arrays という関数が作成され、bmi_arrays.py というファイルに保存されています。参考として以下に表示します。
def calc_bmi_arrays(sample_indices, hts, wts):
# Gather sample heights and weights as arrays
s_hts = hts[sample_indices]
s_wts = wts[sample_indices]
# Convert heights from cm to m and square with broadcasting
s_hts_m_sqr = (s_hts / 100) ** 2
# Calculate BMIs as an array using broadcasting
bmis = s_wts / s_hts_m_sqr
return bmis
この関数は、必要な計算をすべて配列で行っている点に注目してください。
この更新版の配列アプローチでメモリ使用量が減るか確認しましょう。
memory_profilerパッケージをIPythonセッションに読み込みます。bmi_arraysからcalc_bmi_arraysをインポートします。- 上記を終えたら、
%mprunを使って、あなたのスーパーヒーローデータに対して動作するcalc_bmi_arrays()関数をプロファイルします。sample_indices配列、hts配列、wts配列はすでにセッションに読み込まれています。
コーディングが終わったら、次の質問に答えてください。
calc_bmi_array() 関数における配列インデックスとブロードキャストの各行は、どれだけのメモリを消費しますか?(つまり、これら4行について Increment 列を合計した総量はいくつですか?)
この演習はコースの一部です
