我在matlab中编写了一个小循环来生成随机NxN矩阵。循环是
tic
for i=1:10000
u=rand(1,10000);
tau(i,:)=d.*(u(1,:)-0.5);
end
toc
我首先尝试了一次循环程序,
u=rand(1,10000);
tau=d.*(u(1,:)-0.5);
在0.000169秒给了我tau。我认为循环然后需要大约1.69秒。事实并非如此,粉丝狂奔需要555.018280。
有没有 a)速度与迭代次数线性不相关的原因是什么? b)为什么所以多长时间做多次常规的原因 c)一种加快这一速度的方法(我实际上想生成更大的矩阵),例如一个更好的循环或方式给我一个相同类型的1'000'000x1'000'000矩阵?< / p>
答案 0 :(得分:0)
一个显而易见的可能性是内存访问量。测试循环的内存可能完全在缓存中,但是完整循环写入的内存需要大量的主内存访问。
这是一个可检验的假设:时间写完整个矩阵,而不进行算术运算。
如果我了解Matlab索引,您可以更快地切换维度,以便编写位于同一列中的块,而不是同一行。将u转换为循环外的列向量也可能有所帮助。通常,应尽可能按内存顺序进行大型矩阵访问。