文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
第24单元 广播
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论