1. Learn
  2. /
  3. 课程
  4. /
  5. 高效编写 Python 代码

Connected

道练习

使用 %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 列之和是多少?)」

说明

50 XP

答案选项