gpt4 book ai didi

performance - for循环中的计算速度

转载 作者:行者123 更新时间:2023-12-03 03:00:46 25 4
gpt4 key购买 nike

我在 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 矩阵的方法?

最佳答案

您首先必须预先分配矩阵tau,即

  tau = zeros(10000,10000);

否则Matlab将不断地在有足够可用内存的区域重新分配它(=>找到一个有足够可用空间+硬拷贝的区域)。

一般来说,矢量化整个过程可以获得更好的性能:

 u=rand(10000,10000);
tau=d.*(u-0.5);
<小时/>

编辑:最重要的是,请听听下面评论中罗迪的明智建议。 (无论如何,我假设 rand(a,b) 的运行速度比 a 串行执行 rand( 1,b)).

关于performance - for循环中的计算速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13455494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com