在不知不觉中,你可能已经使用了广播数组。简而言之,即使操作数的形状不同,NumPy 也会尝试执行操作。
在本节中,我们将乘一个数组和一个标量。标量将扩展为数组操作数的形状,然后执行乘法运算。我们将下载一个音频文件,并制作一个更小声的新版本。
五个步骤就能完成,让我们来看看它是如何完成的。
以下步骤是读取声音文件并对其进行广播的方法:
首先, 我们先用一个简单的 Python 脚本下载奥斯汀-鲍尔斯的音频文件。
SciPy 有一个 WAV 文件模块,可以加载声音数据或生成 WAV 文件。如果已经安装了 SciPy,那么我们应该已经有了这个模块。
read 方法会返回一个数据数组和采样率。在本例中,我们只关心数据:

第二步 下载文件后,我们可以用 matplotlib 绘制原始 WAV 数据:

第三步 现在,我们将使用 NumPy 制作一个更小的音频样本。这只需要通过乘以一个常数,创建一个具有更小数值的新数组。这就是广播的神奇之处。
最后,由于 WAV 格式的原因,我们需要确保数据类型与原始数组中的数据类型相同:

第四步 这个新数组可以写入一个新的 WAV 文件,如下所示:

第五步 用 matplotlib 绘制新数据数组:

结果是绘制出原始 WAV 文件数据和数值较小的新数组,如上图输出所示。
参考资料
以下链接可提供更多背景信息:
- 位于 http://docs.scipy.org/doc/scipy/reference/generated/scipy.io.wavfile.read.html 的
scipy.io.read()方法页面 - 位于 http://docs.scipy.org/doc/scipy/reference/generated/scipy.io.wavfile.write.html 的
scipy.io.write()方法页面 - 广播概念说明,请访问 http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html