概述
在一些矩阵乘法的证明题中,我们经常碰到将矩阵拆分成向量排布的情况。因为缺少总结的原因,经常反应不过来是怎么个拆分的,就导致了看一些证明比较蛋疼。这篇文章就系统地对矩阵乘法的拆分进行一些总结。
拆分基础
在矩阵运算中,我们有3个基本的量,标量a,向量v,矩阵M。这三个量各自都能进行相乘,那么一共是9种情况。分别如下表。
a | v | M | |
---|---|---|---|
a | aa | av | aM |
v | va | vv | vM |
M | Ma | Mv | MM |
拆分的话主要是因为当矩阵进行参与运算的时候,矩阵可以视为一些行向量r的集合Mn×m = {r1T, r2T, ... , rnT}T,或者看做一些列向量c的集合Mn×m = {c1, c2, ... , cm}。所以导致了拆分复杂了起来,接着我们再对相乘的条件及结果和各种情况下的拆分方式进行分析
形式 | 条件 | 结果 | 拆分 |
---|---|---|---|
aa | a=aa | ||
av | v = av | ||
aM | M = aM | ||
va | v = va | ||
Ma | M = Ma | ||
v1T v2 | v1T和v2维度相同 | a = vTv | |
vnTMn×m | vnT的维度为n | vmT = vnTMn×m | 拆成行vmT = a1r1T + a2r2T + ... + anrnT 拆成列vmT = {vnTc1, vnTc2, ... , vnTcm} |
Mn×mvm | vnT的维度为m | vn = Mn×mvm | 拆成行vn = {r1Tvm, r2Tvm, ..., rnTvm}T 拆成列vn = c1a1 + c2a2 + ... + cmam |
Mn×mMm×k | Mn×m列数=Mm×k行数 | Mn×k = Mn×mMm×k | 只Mm×k拆成行, 无法表示 只Mm×k拆成列,Mn×k = {Mn×mc1, Mn×mc2, ... , Mn×mck} 只Mn×m拆成行, Mn×k = {r1TMm×k, r2TMm×k, ... , rnTMm×k}T 只Mn×m拆成列,无法表示 . Mn×m拆行+Mm×k拆列, 常规矩阵乘法 Mn×m拆列+Mm×k拆行, Mn×k = c1r1T + c2r2T + ... + cmrmT |
含义分析
每一种拆分方式都对应着一种含义,这个含义的本质是把某一方看做"主角",把另外一方看做"变换操作"。拿矩阵M来讲其具有两种含义,一种是代表了变换,另外一种是代表了向量的集合。后者就是作为“主角”,前者就是作为“变换”。下面我们就用这种含义来具体分析典型的几种拆分的具体含义。(没有提到的都可以从以下含义对称理解过去)
vn = Mn×mvm = c1a1 + c2a2 + ... + cmam
该操作可以看做是“Mn×m是主角,是一些向量的集合,vm这些向量进行线性组合”。那么v的第i个元素就是M的第i个向量的权重,最后计算的vn就是加权组合后的。vn = Mn×mvm = {r1Tvm, r2Tvm, ..., rnTvm}T
该操作可以看做是“vm是主角,是m维空间上的点,Mn×m是对vm进行变换,变换到n位空间上的点”。那么M的第i行就是一个变换,用于计算vn对应第i维的值。Mn×k = Mn×mMm×k = Mn×m {c1, c2, ... , ck} = {Mn×mc1, Mn×mc2, ... , Mn×mck}
该操作可以看做是“把右边的矩阵Mm×k看做是主角,是一些向量的集合,左边的矩阵Mn×m是变换,把这坨向量批量变换到成新的向量”。也就是vn = Mn×mvm的批量变换版本。Mn×k = Mn×mMm×k = c1r1T + c2r2T + ... + cmrmT
该操作的含义笔者体会也不深. 只在算高斯分布的时候协方差矩阵碰到过,然而并没有特别深刻的体会。-
常规矩阵乘法
就是"左边的第i行向量"点乘"右边的第j列向量",形成新矩阵的第i行第j列元素。有一张图可以相对直观地记住左边矩阵的元素会和右边的那些矩阵元素相乘。
左边矩阵的下标会和右边矩阵对应的字母相乘,否则两个数是不可能乘到一起的。