首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中生成随机数,使它们平均为特定值。

在java中生成随机数,使它们平均为特定值。
EN

Stack Overflow用户
提问于 2017-07-10 12:47:59
回答 3查看 667关注 0票数 0

我正在考虑对这个随机数发生器使用指数分布,如果我生成一个大约100个数字,它应该平均到一个特定的值,比如7.5。我该怎么做?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-10 14:13:28

如果您希望期望值为7.5,只需使用外部库函数或通过实现您自己的逆变换程序来生成倍数为1/7.5的指数。

如果你希望100个数值的平均值正好是7.5,你可以玩一些有趣的游戏来实现这一点。要想用100件东西平均得到7.5件,它们的总和必须是750件。结果表明,在R上均匀分布N个点,得到一个速率为N/R的泊松过程,泊松发生之间的距离呈指数分布,且速率相同。这导致了以下(并且相对简单)算法:

  1. 创建一个长度为101的数组poisson,其中包含值0和750。
  2. 通过生成99个均匀分布在0到750之间的额外数字来填充数组的其余部分。
  3. 对数组进行排序。
  4. 输出I= 1,...,100的...,100。

我的Java很生疏,所以我用另一种语言实现了它,但是下面是使用统计信息包JMP进行分析时的结果:

下面是我在Ruby中的实现,它实际上是伪代码,如果您感兴趣的话。应该很容易转换成Java。

代码语言:javascript
复制
N = 100
TARGET_MEAN = 7.5

total = N * TARGET_MEAN
poisson = [0, total]
(N - 1).times { poisson << rand(0.0..total) }
poisson.sort!
(1...poisson.length).each { |i| p poisson[i] - poisson[i-1] }
票数 2
EN

Stack Overflow用户

发布于 2017-07-10 13:08:08

如果您选择的发行版有一些参数值,请选择它们,这样您的发行版的期望值为7.5。

对于指数分布a*e^(-a*x),您必须选择a作为1 / 7.5

票数 0
EN

Stack Overflow用户

发布于 2017-07-10 13:08:12

Apache Commons MathExponentialDistribution类,您可以实例化传递给它的均值,这可能是您要寻找的,但是请注意,您画的数字越多,就越接近平均值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45012517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档