Luc*_*nny 3 performance matlab matrix
问题是简单地为矩阵A,B,C,和D是n*n与x是长度的矢量n,找到E = DCBAx在Matlab的最有效的方式,并且在至少有效的方式.
最明显的计算E方法就是直接将它们相乘
这是最有效的方式吗?什么是效率最低的方式?
让我们为这个例子创建虚拟矩阵和向量.
n = 1000;
A = rand(n, n);
B = rand(n, n);
C = rand(n, n);
D = rand(n, n);
x = rand(n, 1);
Run Code Online (Sandbox Code Playgroud)
然后我们可以为矩阵产品定义一些函数句柄,我们在其中强制操作的顺序
fun1 = @() D*C*B*A*x;
fun2 = @() (D*C*B*A)*x;
fun3 = @() (D*(C*(B*A)))*x;
fun4 = @() D*(C*(B*(A*x)));
Run Code Online (Sandbox Code Playgroud)
一个简单的执行时间评估timeit显示fun1,fun2并且fun3几乎以相同的方式执行,同时fun4快了大约100倍.这种行为的原因在于,在前三种情况下,我们需要3种矩阵乘积和1种矩阵矢量乘积,而在最后一种情况下,仅执行4种矩阵矢量乘积.有趣的是,Matlab在评估时无法识别这种简单的优化fun1.
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |