numpy广播机制是什么?
发布网友
发布时间:2024-10-22 22:32
我来回答
共1个回答
热心网友
时间:2024-10-25 21:51
本文属于搬运
如需学习某些库请先去查看官方文档!!!!
术语广播描述了NumPy在算术运算期间如何处理具有不同形状的数组。受某些约束,较小的阵列跨较大的阵列“广播”,使得它们具有兼容的形状。广播提供了一种向量化数组操作的方法,以便循环在C中而不是Python中发生。这样做不会产生不必要的数据副本,通常会导致高效的算法实现。然而,在某些情况下,广播是一个坏主意,因为它会导致内存的低效使用,从而降低计算速度。
NumPy操作通常在数组对上逐个元素进行。在最简单的情况下,两个数组必须具有完全相同的形状。在某些情况下,数组和标量值在操作中组合时,NumPy会将标量视为与数组形状相同的数组,从而进行广播操作,以节省内存和计算。
当对两个数组进行操作时,NumPy将按元素比较它们的形状。它从尾部开始(即最右边)标注尺寸并向左工作。两个维度在以下情况下是兼容的:输入数组不需要具有相同的维数。所得数组将具有与具有最大维数的输入数组相同的维数,其中每个维数的大小是输入数组中对应维数的最大大小。请注意,假定缺失的尺寸的大小为1。当所比较的两个维度中的任一个是一个时,使用另一个维度。换句话说,尺寸为1的尺寸被拉伸或“复制”以匹配其他尺寸。
如果上述规则产生有效结果,则一组数组被称为“可广播”为相同形状。例如,如果a.shape是(5,1),b.shape是(1,6),c.shape是(6,)并且d.shape是(),使得d是标量,则a、B、c和d都可广播到维度(5,6)
以下是不广播的形状示例:将一维数组添加到二维数组时的广播示例。如图2所示,将b添加到a的每一行。在图3中,由于形状不兼容而引发异常。广播提供了一种获取两个数组的外积(或任何其他外运算)的方便方法。下面的示例显示了两个一维数组的外部加法运算。
这里,newaxis索引操作符向a中插入一个新轴,使其成为一个二维的4x1数组。将4x1阵列与形状(3,)的b组合,产生4x3阵列。