【发布时间】:2011-11-30 12:08:53
【问题描述】:
我需要在 Matlab 中进行非常大的矩阵/向量乘法:“A”是 655360 x 5 实值矩阵,不一定是稀疏的,“B”是 655360 x 1 实值向量。我的问题是如何有效地计算:B'*A。
我注意到通过计算 A'*B 可以稍微缩短时间,这会给出一个列向量。但是还是很慢(我需要在程序中多次执行这个操作)。
通过一点点搜索,我发现了 James Tursa 的一个有趣的 Matlab 工具箱MTIMESX,我希望它可以提高上述矩阵乘法的性能。经过几次试验,我只能比 Matlab 原生矩阵乘法获得非常微不足道的收益。
关于我应该如何重写 A'*B 以提高操作效率的任何建议?谢谢。
【问题讨论】:
-
我认为对于矩阵运算,Matlab 的性能已经接近你所能拥有的最好的,因为矩阵运算已经被优化和并行化了。
-
这里提到的许多 Matlab 处理这种矩阵乘法应该没有问题。但是,您的问题表明您的代码或系统存在非常非常大的问题:在我的 i7 机器上乘以这种大小的向量大约需要 0.003 秒。即使我们假设旧机器慢 300 倍,计算时间也应该不到一秒!由于矩阵“A”只需要 26 MB 的内存,因此也不存在内存问题。
标签: performance matlab matrix matrix-multiplication