使用概率分布生成范围内的随机整数

时间:2013-05-08 08:08:29

标签: java random probability poisson apache-commons-math

我有一个问题,我想使用概率分布生成1到5之间的一组随机整数值。

Poisson和Inverse Gamma是两个分布,显示了我所发现的特征(多数均值,数字较少)。

我正在考虑使用Apache Commons Math,但我不确定如何使用可用的发行版生成我想要的数字。

2 个答案:

答案 0 :(得分:11)

从您的问题描述中,听起来您实际上想要从离散概率分布生成样本,并且您可以使用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值调整为您需要的值。

答案 1 :(得分: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;
        }
    }