我想生成大量随机数(均匀分布在区间[0,1]上)。目前这些随机数的生成导致我的程序运行得相当慢,但程序只需将它们计算到大约5位小数。
我不完全确定MATLAB如何生成随机数,但是如果有一种方法只计算它们到5位小数,那么它(希望会大大加快)我的程序。
有没有办法做这样的事情?
非常感谢。
答案 0 :(得分:2)
要回答您的问题,是的,您可以生成单精度随机数,如下所示:
r = rand(..., 'single'); %Reference: http://www.mathworks.com/help/matlab/ref/rand.html
以十进制格式打印时,单精度数字有7(ish)有效数字。
为了回应上面的一些评论,我认为这不会给你带来太多的表现。如果rand
真的是你的慢操作,首先要做的就是批量调用。也就是说,而不是:
for ix 1:1000
y = rand(1,1,'single);
end
使用:
yVector = rand(1000,1,'single');
答案 1 :(得分:2)
如前所述,您可以指示RAND
直接以单精度生成数字,并且最好以合适大小的块生成数字。如果你仍然需要更高的性能,并且你有并行计算工具箱和支持的NVIDIA GPU,gpuArray.rand
功能可以更快,特别是如果你选择像这样的philox生成器:
parallel.gpu.RandStream('Philox4x32-10')
答案 2 :(得分:0)
假设您实际上有一个适当的代码布局,您可以在阵列中生成大量数字,这可能是低精度的解决方案。请注意,我没有测试,但提到速度很快:
R = randi([0 100000],500,300)/100000
这将生成0到1之间的150000个低精度随机数