用于泊松和均匀分布的Java生成器?

10 java random distribution generator poisson

据我所知,标准发生器用于正态分布.我必须根据Normal,Uniform和Poisson分布生成随机数,但我似乎找不到最后2个的类.

我必须在0 - 999999范围内生成它们.

Sim*_*son 12

正如David指出的那样,提供的伪随机数生成器使用Uniform分布.

对于另外两个,我会使用Cern Colt库函数:

这些库函数可以让您轻松地找到从每个分布中获取的随机数,而不是为您提供概率密度函数或累积密度函数,并期望您自己导出数字(这似乎是Apache Commons-Math方法):

RandomEngine engine = new DRand();
Poisson poisson = new Poisson(lambda, engine);
int poissonObs = poisson.nextInt();

Normal normal = new Normal(mean, variance, engine);
double normalObs = normal.nextDouble();
Run Code Online (Sandbox Code Playgroud)

另外,请记住,大λ的泊松分布P(λ)可以通过正态分布N(λ,sqrt(λ))很好地近似.


Dan*_*yer 6

标准Java RNG(java.util.Random)及其子类(如java.security.SecureRandom)已生成均匀分布的值.

它们还有一个方法nextGaussian,它返回正态分布的值.默认情况下,分布的均值为零,标准差为1,但这是一个简单的调整.只需乘以所需的sd并添加所需的平均值即可.因此,例如,如果您想要平均值为6且标准差为2.5的正态分布值,则执行以下操作:

double value = rng.nextGaussian() * 2.5 + 6;
Run Code Online (Sandbox Code Playgroud)

Poisson分布没有明确支持,但您可以通过与Tom的Python代码相同来伪造它.

或者,您可能对我的Uncommons Maths库感兴趣,该提供Normal,Poisson和其他分布的实用程序类.


Dav*_*d Z 5

实际上,标准发生器用于均匀分布.任何语言/库中的基本随机数生成器将始终(在所有情况下我都知道)使用均匀分布,因为这是所有流行的伪随机数生成器算法的结果 - 基本上,均匀随机数是最简单的.

我看到Eddie已经指向了其他发行版的链接,所以我将跳过编写其余内容...