繁体   English   中英

Matlab:有效且低效地乘以矩阵

[英]Matlab: Multiplying Matrices Efficiently and Inefficiently

问题仅在于矩阵ABCDn*nx是长度为n的向量,要在Matlab上以最有效的方式找到E = DCBAx ,并且效率最低。

计算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简单的执行时间评估表明, fun1fun2fun3几乎以相同的方式执行,而fun4速度提高了约100倍。 这种行为的原因在于,在前三种情况下,我们需要3种矩阵乘积和1种矩阵矢量乘积,而在最后一种情况下,仅执行4种矩阵矢量乘积。 有趣的是,Matlab在评估fun1时无法识别这种简单的优化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM