1.7 Numpy的广播机制
Numpy的ufunc中要求输入的数组shape是一致的,当数组的shape不相等时,则会使用广播机制。不过运用广播机制需要满足一定的的规则,否则将会出错。规则如下:
1)让所有输入数组都像其中shape最长的数组看齐,不足的部分则通过在前面加1补齐;
2)输出数组的shaoe是输入数组shape的各个轴上的最大值;
3)如果输入数组的某个轴和输出数组的对应轴的长度相同或者某个轴的长度为1时,这个数组能被用来计算,否则出错;
4)当输入数组的某个轴的长度为1时,沿着此轴运算时都用(或复制)此轴上的第一组值。
广播机制在整个Numpy中用于决定如何处理形状迥异的数组。
import numpy as np
a = np.arange(0, 40, 10).reshape((4, 1))
b = np.arange(3)
print("a矩阵的形状:{}, b矩阵的形状:{}".format(a.shape, b.shape))
# 根据规则1,b要向a看齐,b变成(1, 3)
# 根据规则2,输出数组的形状为输入数组形状的各个轴上的最大值,所以c.shape为(4, 3)
# 根据规则4,我们要把a和b都要扩展为(4, 3)
c = a + b
print("c矩阵的形状:{}".format(c.shape))
print("c矩阵的值:\n{}".format(c))