我有一个问题,我想使用概率分布生成一组介于 1 和 5 之间的随机整数值。
Poisson 和 Inverse Gamma 是两个分布,它们显示了我发现的我所追求的特征(平均多数,较少的数字)。
我正在考虑使用Apache Commons Math,但我不确定如何使用可用的发行版生成我想要的数字。
我有一个问题,我想使用概率分布生成一组介于 1 和 5 之间的随机整数值。
Poisson 和 Inverse Gamma 是两个分布,它们显示了我发现的我所追求的特征(平均多数,较少的数字)。
我正在考虑使用Apache Commons Math,但我不确定如何使用可用的发行版生成我想要的数字。
从您的问题描述中,听起来您实际上想要一个从离散概率分布生成的样本,您可以将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
值调整为您需要的任何值。
我只会产生均匀分布的随机数,然后将它们传递给你想要的分布函数,所以如果分布函数是 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;
}
}