提问人:Paul Rubenstein 提问时间:1/7/2013 更新时间:1/7/2013 访问量:2098
使用低精度MATLAB生成随机数
Generating a random number with low precision MATLAB
问:
我想生成大量随机数(均匀分布在区间 [0,1])。目前,这些随机数的生成导致我的程序运行得很慢,但是程序只需要将它们计算到小数点后 5 位左右。
我不完全确定 MATLAB 是如何生成随机数的,但如果有一种方法可以将它们计算到小数点后 5 位,那么它将(希望大大)加快我的程序速度。
有没有办法做这样的事情?
非常感谢。
答:
2赞
Pursuit
1/7/2013
#1
要回答您的问题,是的,您可以生成单精度随机数,如下所示:
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');
评论
2赞
Edric
1/7/2013
实际上,要求生成只会将全精度结果转换为 。要使生成器仅直接生成,您需要创建一个设置为 的对象。有关详细信息,请参阅 mathworks.com/help/matlab/ref/randstream.html。RAND
single
single
single
RandStream
FullPrecision
false
2赞
Edric
1/7/2013
#2
如前所述,您可以指示直接以单精度生成数字,并且最好以适当大小的块生成数字。如果您仍然需要更高的性能,并且您拥有 Parallel Computing Toolbox 和支持的 NVIDIA GPU,则该功能可能会更快,尤其是当您选择 philox 生成器时,如下所示:RAND
gpuArray.rand
parallel.gpu.RandStream('Philox4x32-10')
0赞
Dennis Jaheruddin
1/7/2013
#3
假设您实际上有一个适当的代码布局,您可以在数组中生成大量数字,这可能是低精度的解决方案。请注意,我没有测试过,但提到它很快:
R = randi([0 100000],500,300)/100000
这将生成 150000 个介于 0 和 1 之间的低精度随机数
评论