【发布时间】:2011-02-06 20:52:41
【问题描述】:
当两个矩阵相乘时,我尝试了以下两个选项:
1)
res = X*A;
2)
for i = 1:size(A,2)
res(:,i) = X*A(:,i);
end
我在两者中都为 res 预先分配了内存。令人惊讶的是,我发现选项 2 更快。
谁能解释一下这是怎么回事?
编辑: 我试过了
K=10000;
clear t1 t2
t1=zeros(K,1);
t2=zeros(K,1);
for k=1:K
clear res
x = rand(100,100);
a = rand(100,100);
tic
res = x*a;
t1(k) = toc;
end
for k=1:K
clear res2
res2 = zeros(100,100);
x = rand(100,100);
a = rand(100,100);
tic
for i = 1:100
res2(:,i) = x*a(:,i);
end
t2(k) = toc;
end
【问题讨论】:
-
在 OSX 2010b 上,我得到的版本一的中位时间为 0.0001,版本二的中位时间为 0.0008。换句话说,矢量化版本快了大约 7 倍。
-
为了消除一些可变性,最好在开始第二次运行之前重置随机生成器。无论如何,我还发现第一个选项要快几倍。
标签: matlab matrix-multiplication