【发布时间】:2011-06-20 18:01:28
【问题描述】:
我想得到 20 个介于 -10 和 10 之间的随机整数,我想到了在 matlab 中使用 rand 函数。
我想到了乘以十,然后找到一种方法来仅获取 -10 到 10 之间的数字,并对超出限制 [-10,10] 的每个其他数字使用迭代来获得一个新数字范围内。
有没有更好更快的方法?
【问题讨论】:
-
有很多类似的问题,但我还没有找到一个要求整数范围的问题。
我想得到 20 个介于 -10 和 10 之间的随机整数,我想到了在 matlab 中使用 rand 函数。
我想到了乘以十,然后找到一种方法来仅获取 -10 到 10 之间的数字,并对超出限制 [-10,10] 的每个其他数字使用迭代来获得一个新数字范围内。
有没有更好更快的方法?
【问题讨论】:
使用
randomIntegers = randi([-10,10],[20,1])
生成一个介于 -10 和 10 之间的随机整数向量。
【讨论】:
虽然 Jonas 的解决方案非常好,但 randi 不在某些早期版本的 MATLAB 中。我相信所有版本都有rand。使用rand 的解决方案是:
randomIntergers = floor(a + (b-a+1) .* rand(20,1));
其中 [a,b] 是您想要分布的值的范围。
如果您使用round(a + (b-a)),您将对“a”和“b”的值产生不均匀的影响。这可以使用hist() 函数来确认。这是因为映射到“a”和“b”的域是该范围内所有其他成员大小的一半。
【讨论】:
a = -10; b = 10; x = round(a + (b-a) .* rand(20000,1)); hist(x,1000); -10 和 10 的情况比其他情况更不可能。
x = floor(a + (b-a+1) .* rand(20,1));
hist(x,1000),然后说服自己为什么它有效。
ceil,-10 也会被排除在外)。猜猜最好的方法是选择均值大于零的所有正值,创建一个随机分布,然后减去均值得到一个均值为零的均匀分布。