百度定义为:
总结一下就是,如果A和B两个矩阵要相乘,A的列数要和B的行数相同的,其实矩阵就是线性代数中对多项式常量的一种抽象表达。
比如:A是2 * 80的矩阵,B是80*2的矩阵,得出的还是2*2的矩阵,简单说就是结果是A的行*B的列的矩阵,哪怕A的列是10000呢,B的行是10000,都不影响A*B的行列数,A的列只能等于B的行,否则就无法相乘。
所谓矩阵链乘法就是:A*B*C*D*E*F......
那A*B*C的的行列到底是多少呢,其实就是A的行*C的列,中间的根本对结果的行列树无法影响,但是根据乘法的结合律A*B*C,可以是先算A*B,再算*C,先说B*C再算*A,就是(A*B)*C或者A*(B*C),这就有个取舍的问题,也许B*C得到的行列式很小,这样乘法的计算次数比前者要少很多。
这就引入了动态规划算法对A*B*C到底扩上哪个计算次数较少的话题。
上面的我也看不懂,,只是最近遇到个面试题总结下:
我的理解只用于可以简单比较他们的大小就成了,,,不要太纠结太多,,不是专业干这个的,稍稍了解下九乘,以后遇到这类问题不至于陌生:
例1: (看不懂的参考例2)
以两个矩阵相乘为例,A1*A2,A1和A2为两个矩阵,假设A1的行列数是p*q,A2的行列数是q*r。注意这里由于是A1乘以A2,所以A1的列数要等于A2的行数,否则无法做矩阵乘法,满足上述条件的矩阵,我们称之为“相容”的。那么对于A1*A2而言,我们需要分别执行p*r次对应A1的行元素乘以A2的列元素,根据线性代数知识,不难得出我们一共需要执行p*q*r次乘法。
对于两个矩阵相乘,一旦矩阵的大小确定下来了,那么所需执行的乘法次数就确定下来了。那么对于两个以上的矩阵呢?是不是也是这样呢。实际上,对于多个矩阵相乘,乘法执行的次数与“划分”有关。例如:
以矩阵链<A1,A2,A3>为例,假设三个矩阵的规模分别为10X100,100X5和5X50。
①以((A1*A2)*A3)方式划分,乘法执行次数为:10*100*5+10*5*50=5000+2500=7500次
②以(A1*(A2*A3))方式划分,乘法执行次数为:100*5*50+10*100*50=25000+50000=75000次
相当于
<A1,A2,A3> ====》》10X100,100X5和5X50
1:自我理解:
对于A*B而言,我们需要分别执行 (m*p) 次 ==>(对应A1的行元素乘以A2的列元素)
根据线性代数知识,不难得出我们一共需要执行 m*n*p 次乘法
例2: (博主完美的解决,,哈哈哈哈哈哈)
思路:
根据以上得出: 1:(A*B)相当于就是 “ A ” 的行乘以 “ B ” 的列:如下例子 ,设(A*B)=D (A*B)*C ==> (D*C)
也就是:
- A==m*n ; B==n*p ; C==p*q; (AB)==m*p == (m*n*p) *****
(上面的这里不要纠结,只要知道如何比较就可以了,纠结这个就过不去的,反正我是不知道的,哈哈,不纠结,我不是专业做这个的,只用了解就行)
依照上面的公式就能比较出下面的大小:
面试题:深度学习是当前很热门的机器学习算法。在深度学习中,涉及到大量矩阵相乘,现在需要计算三个稠密矩阵A,B,C的乘积ABC,
假设三个矩阵的尺寸分别为m*n,n*p,p*q,且m<n<p<q,以下计算顺序效率最高的是:(B)
A: A(BC)
B: (AB)C
C: (AC)B
D: 所有效率都相同
解析:a*b,b*c两矩阵相乘效率为a*c*b
ABC=(AB)C=A(BC).
(AB)C = m*n*p + m*p*q,
A(BC)=n*p*q + m*n*q.
m*n*p<m*n*q,m*p*q< n*p*q, 所以 (AB)C 最小