我想根据分布概率生成一个数字。例如,假设每个数字出现以下情况:
Number| Count
1 | 150
2 | 40
3 | 15
4 | 3
with a total of (150+40+15+3) = 208
then the probability of a 1 is 150/208= 0.72
and the probability of a 2 is 40/208 = 0.192
我如何制作一个随机数生成器,返回基于此概率分布的数字?
我很高兴现在它基于一个静态的、硬编码的集合,但我最终希望它从数据库查询中推导出概率分布。
我见过类似的例子,例如 this one但它们不是很通用。有什么建议吗?
最佳答案
一般的做法是将均匀分布的随机数从0..1区间送入the inverse of the cumulative distribution function您想要的分布。
因此,在您的情况下,只需从 0..1 中抽取一个随机数 x(例如使用 Random.NextDouble()
)并根据其返回值
- 1 如果 0 <= x < 150/208,
- 2 如果 150/208 <= x < 190/208,
- 3 如果 190/208 <= x < 205/208 并且
- 4 否则。
关于c# - 分布式概率随机数发生器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9956486/