c# - 分布式概率随机数发生器

标签 c# random probability probability-theory

我想根据分布概率生成一个数字。例如,假设每个数字出现以下情况:

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/

相关文章:

c# - 如何添加对 AWS SQS 队列的权限?

c# - 如何使用 LINQ 方法语法计算子集合的项数?

java - 随机数 - 增加/减少 1

python - LDA gensim实现,两个不同文档之间的距离

c# - 在C#中分配内存

c# - 无法将 IFormfile 转换为字符串

python - 用于选择具有某些相关概率的 N 个值的代码

statistics - 分类时计算置信度

java - 没有两个连续对象相同的随机选择序列

java - 数组值转字符串函数