返回介绍

第24单元 广播

发布于 2024-01-28 22:01:16 字数 1483 浏览 0 评论 0 收藏 0

numpy对矢量化算术运算的支持非常友好,只需保证参与运算的数组具有相同的形状。如果想在不使用numpy的前提下实现两个数组元素相加,就必须使用for循环或列表推导式,而如果使用numpy,则只需直接将它们相加即可:

   a = np.arange(4)
   b = np.arange(1, 5)
   a + b

➾ array([1, 3, 5, 7])

数组上的矢量化操作又被称为广播。如果参与运算的两个数组维度相等(如上所述)或其中一个是标量(如下所示),就可以将运算在两个维度“广播”:

   a * 5

➾ **array([0, 5, 10, 15])

 累计还是相乘?

在Python和numpy中,星号运算符(*)具有不同的行为。在“核心”Python中,表达式seq*5将列表seq复制五次,而同样的numpy表达式则将数组seq的每个元素乘以5。

你可以把数组和标量混合使用,并配上不同的算术运算。下面让我们创建一个对角矩阵,并添加一些小的(但不是随机的)噪声:

   noise = np.eye(4) + 0.01 * np.ones((4, ))

➾ array([[ 1.01, 0.01, 0.01, 0.01],[ 0.01, 1.01, 0.01, 0.01],[ 0.01, 0.01, 1.01, 0.01],[ 0.01, 0.01, 0.01, 1.01]])

如何得到一些小的随机噪声呢?我们将在第47单元详细讨论随机数生成器,这里只给出一个例子:

   noise = np.eye(4) + 0.01 * np.random.random([4, 4])
   np.round(noise, 2)

➾  array([[ 1.01, 0.  , 0.01, 0.  ],[ 0.01, 1.01, 0.  , 0.01],[ 0.  , 0.  , 1.  , 0.  ],[ 0.  , 0.  , 0.01, 1.  ]])

使用通用函数round()对矩阵元素执行四舍五入操作——一个函数作用在所有的数组元素上!第25单元“揭秘通用函数”可以帮助你真正掌握通用函数(ufunc)。

顺便提一下,如果多次运行前面的示例,会得到不同的结果。这是因为随机数是随机的!

我们将在第30单元“生成合成正弦波”中详细讨论真实世界的、噪声的,以及正弦波形式的信号生成,并使用高级的图形化方式进行研究。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文