Performance 提高性能以生成步长范围内的随机数
为了确保这不是重复的,我已经签出了 我想生成特定范围内的随机数,包括步长(非连续分布) 例如,我想在-2和3之间生成随机数,其中两个连续数字之间的步长为0.02。(例如,[-2-1.98-1.96…2.69 2.98 3],因此生成的数字应该是2.96而不是2.95) 我试过这个:Performance 提高性能以生成步长范围内的随机数,performance,matlab,random,Performance,Matlab,Random,为了确保这不是重复的,我已经签出了 我想生成特定范围内的随机数,包括步长(非连续分布) 例如,我想在-2和3之间生成随机数,其中两个连续数字之间的步长为0.02。(例如,[-2-1.98-1.96…2.69 2.98 3],因此生成的数字应该是2.96而不是2.95) 我试过这个: a=-2*100; b=3*100; r = (b-a).*rand(5,1) + a; for i=1:length(r) if r(i) >= 0 if mod(fix(r(i)),
a=-2*100;
b=3*100;
r = (b-a).*rand(5,1) + a;
for i=1:length(r)
if r(i) >= 0
if mod(fix(r(i)),2)
r(i)=ceil(r(i))/100;
else
r(i)=floor(r(i))/100;
end
else
if mod(fix(r(i)),2)
r(i)=floor(r(i))/100;
else
r(i)=ceil(r(i))/100;
end
end
end
它是有效的
在MATLAB中有另一种方法可以实现这一点,即:
y = datasample(-2:0.02:3,5,'Replace',false)
我想知道:
如果你仔细阅读,前面的答案确实涵盖了你的情况。例如,在步长为1的限制之间生成随机数。但是,让我们将其推广到任意步长,以防您不知道如何到达该步长。有几种不同的方法。这里有一个使用,我们使用默认步长1和从1到可能值的范围作为索引:
lo = 2;
hi = 3;
step = 0.02;
v = lo:step:hi;
r = v(randi(length(v),[5 1]))
如果您查看内部(在命令窗口中键入editdatasample
以查看代码),您将看到它所做的事情与此答案非常相似。如果'Replace'
选项为true
请参见第135行(至少在R2013a中)
如果'Replace'
选项为false
,如在使用上述datasample
时一样,则实际上需要使用randperm
(参见第159行):
因为在这种情况下没有替换,51
是调用中可以请求的最大值数,r
的所有值都是唯一的
<>在C++中,如果你在进行科学计算,生成大量随机变量,则不应该使用<代码> RAND()。相反,您应该使用大周期随机数生成器,例如(Matlab中的默认值)。C++11包括作为的一部分。在
rand()
中。如果你想要快一点的东西,你应该试试这个。如果你想在C++中实现代码,你必须再问一个问题。 如果你仔细阅读,前面的答案会覆盖你的情况。例如,在步长为1的限制之间生成随机数。但是,让我们将其推广到任意步长,以防您不知道如何到达该步长。有几种不同的方法。这里有一个使用,我们使用默认步长1和从1到可能值的范围作为索引:
lo = 2;
hi = 3;
step = 0.02;
v = lo:step:hi;
r = v(randi(length(v),[5 1]))
如果您查看内部(在命令窗口中键入editdatasample
以查看代码),您将看到它所做的事情与此答案非常相似。如果'Replace'
选项为true
请参见第135行(至少在R2013a中)
如果'Replace'
选项为false
,如在使用上述datasample
时一样,则实际上需要使用randperm
(参见第159行):
因为在这种情况下没有替换,51
是调用中可以请求的最大值数,r
的所有值都是唯一的
<>在C++中,如果你在进行科学计算,生成大量随机变量,则不应该使用<代码> RAND()。相反,您应该使用大周期随机数生成器,例如(Matlab中的默认值)。C++11包括作为的一部分。在
rand()
中。如果你想要快一点的东西,你应该试试这个。如果你想在C++中实现代码,你必须再问一个问题。 如果你仔细阅读,前面的答案会覆盖你的情况。例如,在步长为1的限制之间生成随机数。但是,让我们将其推广到任意步长,以防您不知道如何到达该步长。有几种不同的方法。这里有一个使用,我们使用默认步长1和从1到可能值的范围作为索引:
lo = 2;
hi = 3;
step = 0.02;
v = lo:step:hi;
r = v(randi(length(v),[5 1]))
如果您查看内部(在命令窗口中键入editdatasample
以查看代码),您将看到它所做的事情与此答案非常相似。如果'Replace'
选项为true
请参见第135行(至少在R2013a中)
如果'Replace'
选项为false
,如在使用上述datasample
时一样,则实际上需要使用randperm
(参见第159行):
因为在这种情况下没有替换,51
是调用中可以请求的最大值数,r
的所有值都是唯一的
<>在C++中,如果你在进行科学计算,生成大量随机变量,则不应该使用<代码> RAND()。相反,您应该使用大周期随机数生成器,例如(Matlab中的默认值)。C++11包括作为的一部分。在
rand()
中。如果你想要快一点的东西,你应该试试这个。如果你想在C++中实现代码,你必须再问一个问题。 如果你仔细阅读,前面的答案会覆盖你的情况。例如,在步长为1的限制之间生成随机数。但是,让我们将其推广到任意步长,以防您不知道如何到达该步长。有几种不同的方法。这里有一个使用,我们使用默认步长1和从1到可能值的范围作为索引:
lo = 2;
hi = 3;
step = 0.02;
v = lo:step:hi;
r = v(randi(length(v),[5 1]))
如果您查看内部(在命令窗口中键入editdatasample
以查看代码),您将看到它所做的事情与此答案非常相似。如果使用“替换”
选项,则应