使用 %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
请注意,该函数使用「数组」完成了所有必要的计算。
让我们看看,这个改进的数组方案是否能降低内存占用:
- 在 IPython 会话中加载
memory_profiler包。 - 从
bmi_arrays中导入calc_bmi_arrays。 - 完成上述步骤后,使用
%mprun对作用于您的超级英雄数据的calc_bmi_arrays()函数进行剖析。sample_indices数组、hts数组和wts数组已加载到您的会话中。
完成编码后,请回答以下问题:
「在 calc_bmi_array() 函数中,数组索引与广播这几行代码共消耗了多少内存?(即这四行代码的 Increment 列之和是多少?)」
本练习是课程的一部分
