有什么方法可以生成伪随机数以降低精度,从而加快处理速度吗?
另一件事是,如果一次都生成随机数(例如rand(100,1000)
),而不是一次生成一个随机数,那么我会节省时间。有人可以解释为什么这是真的吗?
MATLAB实际上实现了多个随机数生成器。它们在执行时间和“随机性”方面有很大的不同(我认为,但我没有验证)。但是,从您的问题中我了解到,速度对您而言更为重要。
% 'twister' is the default in MATLAB Versions 7.4 and later
tic();
for i=1:1000000
rand('twister');
end
toc();
%Elapsed time is 2.912960 seconds.
% 'state' is the default in MATLAB versions 5 through 7.3
tic();
for i=1:1000000
rand('state');
end
toc();
% Elapsed time is 2.162040 seconds.
% 'seed' is the default in MATLAB version 4
tic();
for i=1:1000000
rand('seed');
end
toc();
% Elapsed time is 0.758830 seconds.
重要说明:我使用较旧版本的MATLAB(v.7.6,又名R2008a)运行了上面的脚本。在较新的版本中,rand(generator)
不建议使用语法。相反,您应该使用该功能rng(seed, generator)
(在线文档)。副作用是,rng(seed, generator)
您可以选择更多的随机数生成器。有关详细信息,请查阅文档。
关于第二个问题:无论选择哪种生成器,一次生成许多随机数总是比生成许多单个随机数快。这是因为MATLAB的内部结构已针对并行处理进行了优化。
tic();
for i=1:100000
rand();
end
toc();
% Elapsed time is 0.024388 seconds.
tic();
rand(100, 1000);
toc();
% Elapsed time is 0.000680 seconds.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句