我在MATLAB中用两种不同的方式编写了一些代码.首先,我使用了两个for循环,乍一看似乎很愚蠢:
Initial = [zeros(10,1) ones(10,1)];
for xpop=1:10
for nvar=1:10
Parent(xpop,nvar) = Initial(nvar,1)+(Initial(nvar,2)-Initial(nvar,1))*rand();
end
end
在第二个方案中,我尝试进行矢量化计算(我假设它可以更快):
Parent = repmat(Initial(:,1),1,10) + rand(10,10).*(repmat(Initial(:,2),1,10)-repmat(Initial(:,1),1,10));
可以在以下三个不同的代码运行中看到经过的时间:
Elapsed time is 0.000456 seconds.
Elapsed time is 0.006342 seconds.
Elapsed time is 0.000457 seconds.
Elapsed time is 0.006147 seconds.
Elapsed time is 0.000471 seconds.
Elapsed time is 0.006433 seconds.
为什么第一个方案比第二个方案更快?它真的在’.*’命令中为循环做了两个愚蠢的事吗?