use*_*770 2 random performance matlab for-loop matrix
我在matlab中编写了一个小循环来生成随机NxN矩阵.循环是
tic
for i=1:10000
u=rand(1,10000);
tau(i,:)=d.*(u(1,:)-0.5);
end
toc
Run Code Online (Sandbox Code Playgroud)
我第一次尝试循环例程,
u=rand(1,10000);
tau=d.*(u(1,:)-0.5);
Run Code Online (Sandbox Code Playgroud)
这给了我0.000169秒的tau.我认为循环然后需要大约1.69秒.它没有,它花了555.018280s与球迷疯狂.
是否存在
速度与迭代次数线性无关的原因?
b)为什么花了这么长时间来多次执行常规的原因
c)一种提高速度的方法(我实际上想生成更大的矩阵),例如更好的循环或方式给我,比方说,一个1'000'000x1'000'000相同类型的矩阵?
你首先要预先分配你的矩阵tau,即
tau = zeros(10000,10000);
Run Code Online (Sandbox Code Playgroud)
否则matlab将在有足够空闲内存的区域(=>找到一个有足够空间+硬拷贝的区域)不断重新分配它.
通常,您可以在整个过程中实现更好的性能:
u=rand(10000,10000);
tau=d.*(u-0.5);
Run Code Online (Sandbox Code Playgroud)
编辑:最重要的是,在下面的评论中听取Rody的明智建议.(无论如何,我认为它的rand(a,b)运行速度比a串行执行 快一点rand(1,b)).