📜  NumPy广播机制

📅  最后修改于: 2020-10-27 02:18:58             🧑  作者: Mango

NumPy广播

在数学运算中,我们可能需要考虑不同形状的阵列。 NumPy可以在涉及不同形状的数组的情况下执行此类操作。

例如,如果我们考虑矩阵相乘运算,则如果两个矩阵的形状相同,则将易于执行此运算。但是,如果形状不相似,我们可能还需要操作。

考虑下面的示例将两个数组相乘。

import numpy as np
a = np.array([1,2,3,4,5,6,7])
b = np.array([2,4,6,8,10,12,14])
c = a*b;
print(c)

输出:

[ 2  8 18 32 50 72 98]

但是,在上面的示例中,如果考虑不同形状的数组,则会得到如下所示的错误。

import numpy as np
a = np.array([1,2,3,4,5,6,7])
b = np.array([2,4,6,8,10,12,14,19])
c = a*b;
print(c)

输出:

ValueError: operands could not be broadcast together with shapes (7,) (8,) 

在上面的示例中,我们可以看到两个数组的形状不相似,因此无法将它们相乘。 NumPy可以通过使用广播的概念执行此类操作。

在广播中,将较小的阵列广播到较大的阵列,以使其形状彼此兼容。

广播规则

如果满足以下情况,则可以进行广播。

  • 较小尺寸的数组可以在形状后附加“ 1″。
  • 每个输出尺寸的大小是该尺寸中输入尺寸的最大值。
  • 如果输入在特定维度上的大小与输出大小匹配或其值正好为1,则可以在计算中使用该输入。
  • 如果输入大小为1,则第一个数据条目将用于沿维度进行计算。

如果满足以下规则,则可以将广播应用于阵列。

  • 所有输入数组都具有相同的形状。
  • 数组具有相同的维数,每个维的长度可以是公共长度或1。
  • 尺寸较小的数组可以在形状后附加“ 1″。

让我们看一个广播的例子。

import numpy as np
a = np.array([[1,2,3,4],[2,4,5,6],[10,20,39,3]])
b = np.array([2,4,6,8])
print("\nprinting array a..")
print(a)
print("\nprinting array b..")
print(b)
print("\nAdding arrays a and b ..")
c = a + b;
print(c)

输出:

printing array a..
[[ 1  2  3  4]
 [ 2  4  5  6]
 [10 20 39  3]]

printing array b..
[2 4 6 8]

Adding arrays a and b ..
[[ 3  6  9 12]
 [ 4  8 11 14]
 [12 24 45 11]]