numpy的广播(broadcasting)机制
根据个人理解,其本质上是对于某些特殊的、形状不相符的数组进行一定规则的变化,使得数组间满足矩阵运算的规则。(说不定也可以理解为是简化输入的一种方式?)
首先说一句,似乎现在网上很多博客都喜欢把多维数组的维度单独称为轴。。。
为啥不干脆叫多轴数组算了
根据https://www.cnblogs.com/yangmang/p/7125458.html的介绍,广播的发生条件可以用如下方法判断: 将两个多维数组的维度数组后端对齐,依次从后往前比较,若是都满足以下条件则可以进行广播:
- 维度的大小(轴长)相等;
- 其中一个多维数组的维度大小为1(至少其中一个多维数组在该维度的轴长为1);
- 其中一个多维数组不存在该维度。
举例如下:
shape(5, 4, 3, 2, 1)
shape( 4, 2, 1, 1)
按照从右往左进行计数的话,有: 第一维满足条件1、2; 第二维满足条件2; 第三维不满足任何条件; 第四维满足条件1; 第五维满足条件3。 因而,由于第三维不满足任何条件,这两个多维数组间在运算时不能发生广播;但若去除第三维,可以由第二个数组进行广播,使用尾部剩余维度的数据填充,直至与第一个数组形状相同,然后进行元素级别的运算。
数组 [[[[1,2], [3,4]],
[[1,2], [3,4]]],
[[[1,2], [3,4]],
[[1,2], [3,4]]],
[[[1,2], [3,4]],
[[1,2], [3,4]]],
[[[1,2], [3,4]],
[[1,2], [3,4]]]] 可以与数组 [[[1],[2]]] 进行相加操作,结果为上面数组中的[[1,2],[3,4]]单元全部变为[[2,3],[5,6]]。 有没有两个多维数组间的相互传播有待测试。