java - 在java中生成随机数,使其平均值为特定值

标签 java random exponential-distribution

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

最佳答案

如果您希望期望值为 7.5,只需使用外部库函数或实现您自己的 inverse transform routine 生成比率为 1/7.5 的指数。 .

如果您希望 100 个值的平均值恰好为 7.5,您可以玩一些有趣的游戏来实现此目的。要使 100 个事物的平均值为 7.5,它们的总和必须为 750。事实证明,将 N 个点均匀分布在范围 R 上会产生速率为 N/R 的泊松过程,并且泊松出现之间的距离呈指数分布,其中相同的利率。这导致了以下(相对简单的)算法:

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

我的Java很生疏,所以我用不同的语言实现了它,但下面是用统计包JMP分析的结果:

Exponential distribution with average exactly equal to 7.5

<小时/>

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

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] }

关于java - 在java中生成随机数,使其平均值为特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45012517/

相关文章:

Matlab:卡方拟合(chi2gof)来测试数据是否呈指数分布

c++ - 如何生成具有指数分布(均值)的随机数?

java - 如何从 shaded jar 中排除 *.DSA 和 *.SF 文件?

java - 以编程方式取消部署 war 文件 (Wildfly 18.x)

python - 从列表列表中随机选择 X 个列表

java - 在 JUnit 测试类中使用随机值

python - 如何在 python 中使用 MLE 来拟合双指数分布?

java - hadoop fs -mkdir 没有创建所需的文件夹

具有实例方法的 Java 构造函数

java - 随机与随机播放