NumPy基础-广播

“广播”一词描述NumPy如何在算术运算期间处理具有不同形状的数组。受一定限制,较小的数组在较大的数组之间传播,以便它们具有兼容的形状。广播提供了一种向量化数组操作的方法,这种循环会在C中而不是Python中发生。这样做不会产生不必要的数据副本,而且通常会带来高效的算法实现。然而,在某些情况下,广播并不是一个好主意,因为它会导致低效的内存使用,从而减慢计算速度。
NumPy操作通常在逐个元素的数组对上进行。在最简单的情况下,两个数组必须具有完全相同的形状,如下所示:
在这里插入图片描述
当阵列的形状满足某些约束时,NumPy的广播规则会放宽此约束。在操作中将数组和标量值组合在一起时,会出现最简单的广播形式,示例:
在这里插入图片描述
结果等同于前面的示例,其中b是一个数组,我们可以认为标量在算术运算中b被拉伸成与形状相同的数组a。b中的新元素只是原始标量的副本,延伸类推只是概念上的。NumPy足够聪明,可以使用原始标量值而无需实际操作副本,从而使广播操作尽可能地节省内存并提高计算效率。
第二个示例中的代码比第一个中的代码更有效,因为广播在乘法过程中移动的内存更少(b是标量而不是数组)。

一般广播规则

当对两个数组进行操作时,NumPy逐元素比较其形状。它从尾部(即最右边)的维度开始,一直向左移动。两种维度在两种情况兼容:它们是平等的或者其中之一是1。
如果不满足这些条件,则会引发ValueError: operands could not be broadcast together异常,表明数组的形状不兼容。所得数组的大小是沿着输入的每个轴的大小,而不是1。
数组不需要有相同数量的尺寸。例如,如果你有一个256×256×3RGB值数组,并且想用不同的值缩放图像中的每种颜色,则可以将图像乘以一个带有3个值一维数组。根据广播规则来排列这些数组的尾轴大小,表明它们是兼容的:
在这里插入图片描述
当被比较的维度中有一个是其中一个时,将使用另一个。换句话说,尺寸为1的维度被拉伸或“复制”以匹配其他维度。
在下面示例中,A和B数组都具有长度为1的轴,这些轴在广播操作期间会扩展为更大的大小。
在这里插入图片描述
更多示例:
在这里插入图片描述
无法广播的形状示例:
在这里插入图片描述
实践中的广播示例:
在这里插入图片描述
广播提供了一种获取两个数组的外部乘积(或任何其它外部操作)的便捷方法。下面的示例显示了两个1-d数组的外部加法运算:
在这里插入图片描述
在这里,newaxis索引运算符将新轴插入a中,使其成为二维4×1数组与形状为(3,)的b组合,会生成一个4×3数组。

如果你想学习Python,但是找不到学习路径和资源,欢迎上指尖编程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值