矩阵乘法的多种理解形式(硬件设计的基础)(FPGA)
1、外积和内积:
(1)内积:一个行向量乘以一个列向量称作向量的内积 ,又叫作点积,结果是一个数:
;
(2)外积:一个列向量乘以一个行向量称作向量的外积 ,外积是一种特殊的克罗内克积(克罗内克积是两个任意大小的矩阵间的运算),结果是一个矩阵,
;
2、矩阵乘法的变换理解:
矩阵是由向量组成的,将矩阵乘法转换为向量乘法,是从多种角度理解矩阵乘法的精髓。
我们对一个矩阵A(假设行和列均为2),可以把它看作由两个行向量组成的列向量 ,或者是由两个列向量组成的行量
,其中
表示列向量,
表示行向量。
这样矩阵A和矩阵B的乘积按照不同形式分解,就可以组成四种方式。
(1)A是由行向量组成的列向量,B是由列向量组成的行向量(逐个算出结果矩阵里的每个点,这是最传统的、最经典的、最基本的理解方式):
此时AB乘积变为了两个新的向量的外积形式:
这里面每一个都是一个向量,因此
就是一个内积,计算结果就是AB矩阵第i行第j列中的元素。因此,我们可以看到,矩阵乘积是两个向量的外积,并且所得到的外积矩阵中的每一个元素是一个内积。
例子如下((N*1)*(1*N)=(N*N) ):
最后的N*N维的结果矩阵,是分别算出结果矩阵的每一个值,得到结果矩阵。
(2)、 A是由列向量组成的行向量,B是由行向量组成的列向量(把结果矩阵分解成多个矩阵,分别求出后累加得到结果矩阵):
此时AB乘积变为了两个新的向量的内积形式。按照内积定义我们有:
注意到是一个外积形式,因为
是一个列向量,
是一个行向量,因此C是由各个外积矩阵相加得到的。
例子如下((N*N)*(N*1)=(N*1) ):
最后的N*1维的结果矩阵,是由N个(N*1)维的矩阵累加得到的。
(3)、 A是由列向量组成的行向量,B也是由列向量组成的行向量:
令C = AB, 我们考虑C的每一个列向量(C也是由列向量组成的行向量):
同理:
因此,矩阵C的每一个列向量,是A的列向量的一个线性组合,该线性组合中的系数是的各个元素。从这个角度说C的每一列都存在于A的列向量空间内。
(4)、 A是由行向量组成的列向量,B也是由行向量组成的列向量:
我们现在考虑C的每一个行向量(C也是由行向量组成的列向量):
同理:
因此,矩阵C的每一个行向量,是B的行向量的一个线性组合,该线性组合中的系数是的各个元素。从这个角度说C的每一个行向量都存在于B的行向量空间内。
3、总结:
(1)方式先将A抽象为列向量,将B抽象为行向量,从而将矩阵乘法变为了一种外积的形式,而外积矩阵中的每一个元素是一个行向量和一个列向量的内积。这种方式每次得到C的一个元素。
(2)方式先将A抽象为行向量,将B抽象为列向量,从而将矩阵乘法变为了一种内积形式,内积的各个组成部分又是一个外积。这种方式每次不是得到C的一个元素
,而是将C看作是多个矩阵相加组成的,每次计算得到一个加数矩阵。
(3)方式,C的列向量存在于A的列向量空间内,A乘以B相当于是对A进行了列变换。
(4)方式,C的行向量存在于B的列向量空间内,A乘以B看作是对B进行了行变换。
由(3)(4)看出,如果想对一个矩阵进行行变换,可以左乘一个矩阵;相应的如果想对矩阵进行列变换,可以右乘一个矩阵。
矩阵乘积到底是什么???
它是一个外积,外积矩阵的每一个元素是一个内积,
它是一个内积,内积的每个成分是一个外积,
它是列向量组成的行向量,每个列向量是A的列空间的线性组合,
它是行向量组成的列向量,每个行向量是B的行空间的线性组合。
####### 转载请注明出处 https://blog.****.net/Gentleman_Qin/article/details/79999858 #######