问题是简单地为矩阵A
,B
,C
,和D
是n*n
和x
即长度n
的向量,以找到E = DCBAx
在Matlab的最有效的方式,并且在效率最低的方式。Matlab的:乘法矩阵高效和低效
最明显的方法来计算E
只是乘他们直截了当
这是最有效的方法是什么?什么是效率最低的方法?
问题是简单地为矩阵A
,B
,C
,和D
是n*n
和x
即长度n
的向量,以找到E = DCBAx
在Matlab的最有效的方式,并且在效率最低的方式。Matlab的:乘法矩阵高效和低效
最明显的方法来计算E
只是乘他们直截了当
这是最有效的方法是什么?什么是效率最低的方法?
让我们为这个例子创建虚拟矩阵和向量。
n = 1000;
A = rand(n, n);
B = rand(n, n);
C = rand(n, n);
D = rand(n, n);
x = rand(n, 1);
然后,我们可以定义一些函数处理的矩阵产品,这是我们迫使操作的顺序
fun1 = @() D*C*B*A*x;
fun2 = @() (D*C*B*A)*x;
fun3 = @() (D*(C*(B*A)))*x;
fun4 = @() D*(C*(B*(A*x)));
与timeit
一个简单的执行时间的评估表明,fun1
,fun2
和fun3
执行几乎以相同的方式,而fun4
约快100倍。这种行为的原因是,在前三种情况下,我们需要3个矩阵产品和1个矩阵向量产品,而最后一个产品只有4个矩阵向量产品。有趣的是,Matlab在评估fun1
时无法识别这个简单的优化。
+1斑点!首先减小尺寸 – 2014-09-25 09:48:33
+1 - 这我不知道。很有用。 – rayryeng 2014-10-28 17:45:10
相关:http://stackoverflow.com/questions/6058139/why-is-matlab-so-fast-in-matrix-multiplication? – 2014-09-25 04:59:36
最低效率确实是一个有点渺茫的问题,有无数的解决方案将执行平庸。但是,对于这种操作,与内置矩阵乘法相比,实施具有嵌套循环的矩阵乘法算法通常表现得非常不利。 – sobek 2014-09-25 06:36:05