NumPy 中文文档

version: 1.14.0

Built with Teadocs

广播

# 广播

每个通用函数接受数组输入并通过在输入上逐元素地执行核心功能来生成数组输出(其中元素通常是标量,但可以是用于广义ufunc的向量或更高阶子数组)。 应用标准广播规则,以便仍然可以有效地操作不共享完全相同形状的输入。 广播可以通过四个规则来理解:

  1. 所有ndim小于最大ndim输入数组的输入数组,其形状都有1的前置值。
  2. 输出形状的每个维度中的大小是该维度中所有输入大小的最大值。
  3. 如果输入在特定维度中的大小与该维度中的输出大小匹配,或者其值正好为1,则可以在计算中使用输入。
  4. 如果输入的形状中的维度大小为1,则该维度中的第一个数据项将用于该维度的所有计算。换句话说,ufunc的步进机械不会沿着该维度前进(该维度的步长将为0)。

广播在整个NumPy中用于决定如何处理形状迥异的数组;例如,所有算术运算(+,-,*,…)在操作前在两道射线之间播送阵列。

如果上述规则产生有效的结果,即下列情况之一为真,则将一组数组称为“可广播的”,其形状相同:

  1. 这些阵列都具有完全相同的形状。
  2. 阵列都具有相同的维数,每个维度的长度是常用长度或1。
  3. 尺寸太小的阵列可以使其形状前面加上长度为1的尺寸以满足属性2。

例子

如果a.shape是(5,1),b.shape是(1,6),c.shape是(6,),d.shape是 () 使得d是标量,然后a,b,c和d都可以广播到维度(5,6); 和

  • 一个像(5,6)数组的行为,其中a[:, 0]被广播到其他列,
  • b的作用类似于(5, 6)数组,其中b[0, :]广播到其他行,
  • c就像一个(1, 6)数组,因此像一个(5, 6)数组,其中c[:]广播到每一行,最后,
  • d的作用类似于(5, 6)数组,其中重复单个值。