在写代码计算梯度的过程中发现了一个以前忽略的点,numpy的广播机制。
在不同形状的矩阵进行对应元素的相加、相减、相乘、相除等操作时,numpy可以通过广播机制实现矩阵的自动扩展,从而实现矩阵运算。广播并不是任意进行的,主要有两种情况。
一种是数组的后缘维度相同,即这种情况:a1为(5,4),a2为(4,),a2会自动扩展成(5,4),或者a1为(5,4,3),a2为(5,4)或(3,),a2都会扩展成(5,4,3)。
另一种情况是存在长度为1的轴,例如:a1为(4,3),a2为(1,3),a2会自动扩展为(4,3),再或者a1为(5,4,3),a2为(1,4,3)或(5,1,3)或(5,4,1),a2均会分别沿0轴、1轴、2轴扩展成(5,4,3)。
所以通过numpy的广播机制,能够直接实现矩阵和向量的算数运算。