gpt4 book ai didi

ruby - 如何在 Ruby 中获取具有给定离散分布的随机数

转载 作者:数据小太阳 更新时间:2023-10-29 07:31:47 27 4
gpt4 key购买 nike

我正在为我的大学作业编写代码,该作业与分布和随机滚动相关。所以问题是:如何在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com