作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在为我的大学作业编写代码,该作业与分布和随机滚动相关。所以问题是:如何在 Ruby 中获得具有给定离散分布的随机数。
更具体地说:在具有正态离散分布的简单示例中,例如(0 with P=1/2;1000 with P=1/2)我可以编写这样的函数:
def chooseNumber(a,b)
rval = Random.rand(0..1)
return a if rval == 0
return b
end
第一个问题:有没有办法用原生的Random类来写?
第二个问题:处理分布的最佳方式是什么,例如(P=1/5 的 0;P=2/5 的 2;P=2/5 的 1000)或更糟的(P=0 的 0) ,33; 2 P=0,49; 1000 P=0,18)?
最佳答案
我会选择这样的东西
def pick_with_distribution(distributions)
r = rand
distributions.detect{ |k, d| r -= d; r < 0 }.first
end
distributions = { 0 => 0.33, 2 => 0.49, 1000 => 0.18 }
pick_with_distribution(distributions)
#=> 0
为了检查分配是否正确,我运行了 10000 次,结果如下:
10000.times.inject({}) do |h, _|
r = pick_with_distribution(distributions)
h[r] ||= 0
h[r] += 1
h
end
#=> {0=>3231, 1000=>1860, 2=>4909}
关于ruby - 如何在 Ruby 中获取具有给定离散分布的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33526298/
我是一名优秀的程序员,十分优秀!