用低精度MATLAB生成随机数

时间:2013-01-06 21:14:50

标签: matlab random precision

我想生成大量随机数(均匀分布在区间[0,1]上)。目前这些随机数的生成导致我的程序运行得相当慢,但程序只需将它们计算到大约5位小数。

我不完全确定MATLAB如何生成随机数,但是如果有一种方法只计算它们到5位小数,那么它(希望会大大加快)我的程序。

有没有办法做这样的事情?

非常感谢。

3 个答案:

答案 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个低精度随机数