Broadcasting 官方文档
参考文档
广播机制应用:
- numpy.array与scalar
将scalar扩充成array的形状后,进行操作
- 一般arrays间的广播机制
从最后边的维度开始匹配,当满足下面两个条件的任意一个时,两个数组间是兼容的:
- 维度相等
- 有一个的维度为1.
如果上述两个条件都无法满足,则会抛出ValueError: operands could not be broadcast together exception is thrown
- 下面的例子中,A和B阵列都具有长度为1的轴,该轴在广播操作期间扩展为更大的尺寸
结果是在每个维度上取较大的值
- 具体例子
二维数组与一维数组相加
(4,3) 与(3,)
import numpy as np
b = np.arange(6).reshape(2,1,3)
print('b','\n',b,'\n',b.shape)
c = np.arange(6,12).reshape(2,3)
d = b+c
print('c','\n',c,'\n',c.shape)
print('d=b+c','\n',d,'\n',d.shape)
b.shape [2,1,3]
c.shape [2,3]
从右边开始,看两个数组是否兼容,倒数第一位都是3,倒数第二位,b为1,扩充为c的2,最后结果d.shape = [2,2,3]
b的扩充过程[2,1,3] ——> [2,2,3]
b
[[[0 1 2]]
[[3 4 5]]]
扩充为
b'
[[[0 1 2]
[0 1 2]]
[[3 4 5]
[3 4 5]]]
c的扩充过程[2,3] ——> [2,2,3]
[[ 6 7 8]
[ 9 10 11]]
变为
[[[ 6 7 8]
[ 9 10 11]]
[[ 6 7 8]
[ 9 10 11]] ]
相加后的结果d
[[[ 6 8 10]
[ 9 11 13]]
[[ 9 11 13]
[12 14 16]]]