一个关于在MATLAB矩阵乘法的效率。

7视图(30天)
如果我们有以下两个在MATLAB矩阵:
一个=兰德(100100);
B =兰德(100、1000);
现在我们考虑以下两种情况下的计算:
(1)A * B,这是执行10000次:
抽搐
k = 1:1
A * B;
结束
toc
(2)A * B (: 1), A * B (:, 2),…A * B(:, 1000),其中每个执行10000次:
抽搐
j = 1:1000
b_j = B (:, j);
k = 1:1
* b_j;
结束
结束
toc
很明显,所需的总次乘法两种情况下是相同的。然而,在MATLAB的对比表明,例1所使用的计算时间明显低于第二种情况。有人能做出一些解释或评论关于这个问题吗?

答案(2)

史蒂文的主
史蒂文的主 2021年11月9日
如果你是去杂货店去接一堆物品共进晚餐,这过程会更有效?
  1. 去杂货店,填补你的购物车和所有你所需要的物品,买他们,带他们回家。
  2. 去杂货店,买一件,把它带回家。去杂货店,买第二项列表,把它带回家。去杂货店,买的第三项列表,把它带回家。等。
你的第一个示例调用 * 运营商10000倍。你的第二个电话1000 * 10000次。肯定,第二个例子是调用函数在较小的数组,但事实是,在你的第二个购物过程中你的购物袋将打火机每个行程不超过了额外的旅行在你的房子和商店。
1评论
埃卢于
埃卢于 2021年11月10日
非常感谢,你的简单的例子启发我。但是你能给我一些理论解释?是因为的矩阵向量操作执行情况2是通过使用级别2的基本线性代数子程序(bla),而案例1的矩阵,矩阵操作通过使用更高效的三级布拉斯特区吗?

登录置评。


克里斯
克里斯 2021年11月9日
Matlab是建立矩阵数学第一,高度优化的 LAPACK 图书馆的核心。这就是它的使用案例1。Matlab不是为遍历循环优化。
矢量化操作速度比循环。如果你需要相同的操作集应用于多维数组的所有元素,它几乎总是会更快如果你能找到一个没有循环的方法。例如,element-wise运营商
^ *。/
和关系运算符
< > < = > = = = ~ =
可以在整个数组不引入循环操作,因此很快。

类别

找到更多的在性能和内存帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!