Yuv*_*dam 18 java random math probability
给定一个大小的数组,n我想为每个索引生成随机概率Sigma(a[0]..a[n-1])=1
一个可能的结果可能是:
0 1 2 3 4
0.15 0.2 0.18 0.22 0.25
Run Code Online (Sandbox Code Playgroud)
另一个完全合法的结果可能是:
0 1 2 3 4
0.01 0.01 0.96 0.01 0.01
Run Code Online (Sandbox Code Playgroud)
如何轻松快速地生成这些内容?任何语言的答案都很好,Java首选.
Kob*_*obi 22
获得n个随机数,计算它们的总和,并通过将每个数除以总和来将总和标准化为1.
via*_*tic 16
您要完成的任务等同于从N维单位单纯形中绘制随机点.
http://en.wikipedia.org/wiki/Simplex#Random_sampling可能对您有所帮助.
一个天真的解决方案可能如下:
public static double[] getArray(int n)
{
double a[] = new double[n];
double s = 0.0d;
Random random = new Random();
for (int i = 0; i < n; i++)
{
a [i] = 1.0d - random.nextDouble();
a [i] = -1 * Math.log(a[i]);
s += a[i];
}
for (int i = 0; i < n; i++)
{
a [i] /= s;
}
return a;
}
Run Code Online (Sandbox Code Playgroud)
要从N维单位单纯形中均匀地绘制一个点,我们必须采用指数分布随机变量的向量,然后通过这些变量的总和对其进行归一化.为了获得指数分布的值,我们采用log均匀分布值的负值.