2013-05-08 97 views
5

我有一个问题,我想用一个概率分布生成一组介于1和5之间的随机整数值。用概率分布生成范围内的随机整数

泊松和逆伽玛是两个分布,显示我发现后我的特点(大部分在平均值,较低的数字)。

我在寻找使用Apache Commons Math,但我不知道如何使用可用的分布生成我想要的数字。

+1

那么,这里有一个出发点:http://commons.apache.org/proper/commons-math/javadocs/api-3.2/org/apache/commons/math3/distribution/PoissonDistribution.html – Yuushi 2013-05-08 08:13:11

回答

10

从您的问题描述,这听起来像你真的想要一个样本是从离散概率分布生成的,您可以使用EnumeratedIntegerDistribution来实现此目的。选择您的每个整数适当的概率,也许像下面这样将满足您的需求:

int[] numsToGenerate   = new int[] { 1, 2, 3, 4, 5 }; 
double[] discreteProbabilities = new double[] { 0.1, 0.25, 0.3, 0.25, 0.1 }; 

EnumeratedIntegerDistribution distribution = 
    new EnumeratedIntegerDistribution(numsToGenerate, discreteProbabilities); 

int numSamples = 100; 
int[] samples = distribution.sample(numSamples); 

刚刚调整到任何您所需要的discreteProbabilities值。

+0

是否还有EnumeratedDistribution for Objects? – testiguy 2015-06-25 11:57:33

0

我只想产生均匀分布的随机数,然后将它们传递到你想要的分布函数,因此,如果分布函数X^2

import java.util.ArrayList; 

import java.util.Random; 



    public class Test{ 

     public static void main(String args[]){ 
      Test t=new Test(); 
     } 

     public Test(){ 

      Random rnd=new Random(); 

      ArrayList<Double> data=new ArrayList<Double>(); 

      for(int i=0;i<1000;i++){ 
       data.add(useFunction(rnd.nextDouble())); 
      } 

     } 

     public double useFunction(double in){ 
      return in*in; 
     } 
    } 
+0

这就是说如果theres Apache中的内置函数将更容易 – 2013-05-08 08:14:38