最近在用numpy的时候,里面的矩阵和向量之间各种乘法加法搞的我头昏脑胀,整理下总结出来的规则
首先说明array型数据结构有两种类型,一种是一维的向量,比如用np.linspace(1,2,num=2)创建出的对象,shape为(2,);另外一种就是多维的矩阵,如np.zeros(1,2)创建出的对象,其shape为(1,2),这两种类型是不一样的。
一、矩阵之间的矩阵乘法
不必多说,就是按照正常的矩阵乘法规则来做
(N,M) (M,P) = (N,P)
二、矩阵之间按元素相乘、相加
这里开始就涉及到广播(broadcast)的问题了。
其实也比较简单,两个矩阵broadcast后的结果每一维都是两个矩阵中最大的。
但broadcast必须满足两个规则,即要么相对应的维数相等,要么其中有一个矩阵的维数是1。
那么问题来了,哪两个维度是相对应的维数呢?规则就是将矩阵的shape写出来,然后按右对齐逐维对比。
通过以上方法,可以得出两矩阵broadcast结果的维数,而最后结果的计算方法就是先将两个矩阵都broadcast到结果的维数,然后再按照相同维度的矩阵对应元素相乘、相加。例子如下
A (4d array): 8 x