【问题标题】:Using rand in matlab to produce numbers between limits [duplicate]在matlab中使用rand产生限制之间的数字[重复]
【发布时间】:2011-06-20 18:01:28
【问题描述】:

可能重复:
Is there a way in Matlab using the pseudo number generator to generate numbers within a specific range?

我想得到 20 个介于 -10 和 10 之间的随机整数,我想到了在 matlab 中使用 rand 函数。

我想到了乘以十,然后找到一种方法来仅获取 -10 到 10 之间的数字,并对超出限制 [-10,10] 的每个其他数字使用迭代来获得一个新数字范围内。

有没有更好更快的方法?

【问题讨论】:

  • 有很多类似的问题,但我还没有找到一个要求整数范围的问题。

标签: matlab random limit


【解决方案1】:

使用

randomIntegers = randi([-10,10],[20,1])

生成一个介于 -10 和 10 之间的随机整数向量。

【讨论】:

  • 谢谢!我的代码是 12 行,现在只需要一行!
  • @system:如果你觉得有用,请考虑接受我的回答。
  • +1,因为这个网站上的人没有投票正确答案的习惯。
【解决方案2】:

虽然 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));
  • 嗯,我一直认为 'floor(A)' 四舍五入到小于或等于 A 的最接近的整数,所以 'floor(-.9) = -1' 但 'floor(.9) = 0'。而round只是去最接近的整数。在我看来,从直觉上看,下限会使数据偏左,给你一个新的平均值,大约为 -0.5。
  • 我建议计算它,然后查看它的hist(x,1000),然后说服自己为什么它有效。
  • 哇,我在创建随机数时从未花时间查看直方图。使用圆形的边缘编号存在不均匀分布。这是有道理的,因为映射到 -10 和 10 的域是该范围内所有其他成员大小的一半。但是使用 floor 仍然存在问题,因为该范围的任何成员都不会映射到整数 10。(如果您尝试使用 ceil,-10 也会被排除在外)。猜猜最好的方法是选择均值大于零的所有正值,创建一个随机分布,然后减去均值得到一个均值为零的均匀分布。
猜你喜欢
  • 1970-01-01
  • 2012-09-06
  • 1970-01-01
  • 1970-01-01
  • 2011-04-02
  • 2015-07-01
  • 2011-12-22
  • 2015-02-27
  • 2013-03-10
相关资源
最近更新 更多