当前位置: 首页 > 面试题库 >

生成总数为1的N个数字

魏晨
2023-03-14
问题内容

给定大小数组,n我想为每个索引生成随机概率,这样Sigma(a[0]..a[n-1])=1

一种可能的结果可能是:

0     1     2     3     4
0.15  0.2   0.18  0.22  0.25

另一个完全合法的结果可能是:

0     1     2     3     4
0.01  0.01  0.96  0.01  0.01

我怎样才能轻松快捷地生成这些?任何语言的答案都可以,最好是Java。


问题答案:

您要完成的任务无异于从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;
    }

为了从N维单位单纯形 均匀地 绘制一个点,我们必须获取一个 指数
分布的随机变量向量,然后通过这些变量的总和对其进行归一化。为了获得指数分布的值,我们取负log的均匀分布值。



 类似资料:
  • 问题内容: 我将如何列出N个(例如100个)随机数,使其总和为1? 我可以用 我将如何修改此列表,使其总数为1(这是用于概率模拟)。 问题答案: 实际上,最简单的解决方案是采用N个随机值并除以和。 一种更通用的解决方案是使用Dirichlet发行版 http://en.wikipedia.org/wiki/Dirichlet_distribution (可在numpy中获得)。 通过更改分布的参数

  • 本文向大家介绍JavaScript函数采用数字n并生成前n个素数的数组,包括了JavaScript函数采用数字n并生成前n个素数的数组的使用技巧和注意事项,需要的朋友参考一下 我们需要编写一个JavaScript函数,该函数接受数字n,并返回包含前n个质数的数组。我们知道素数是只能被1整除的数,例如2、3、19、37、73等。 我们将首先编写一个检查给定数是否为质数的函数,然后运行循环以生成n个质

  • 本文向大家介绍Python从1到n的数字总和,包括了Python从1到n的数字总和的使用技巧和注意事项,需要的朋友参考一下 示例 如果我想找出数从和1到n哪里n是自然数,我能做到1 + 2 + 3 + 4 + ... + (several hours later) + n。另外,我可以编写一个for循环: 或者我可以使用一种称为递归的技术: 递归相对于以上两种方法具有优势。递归所需的时间少于写出1

  • 这个问题以前也有人问过,但我从来没有真正看到过好的答案。 > 我想生成8个和为0.5的随机数。 我希望每个数字都是从一个均匀分布中随机选择的(即下面的简单函数将不起作用,因为数字将不是均匀分布的)。 代码应该是可推广的,这样您就可以生成N个和M(其中M是正浮点)的均匀随机数。如果可能的话,能否也请你解释一下(或用一个图表示)为什么你的解会在适当的范围内均匀地产生随机数? 失手的相关问题: 在pyt

  • 第一次在StackOverflow。我希望有人能帮我搜索一个算法。 我需要在给定的范围内生成N个随机数,求和到给定的和! null 可以生成N个常数和的数,解模,像这样:生成和是常数的随机数,但我不能用范围来完成。 或者通过产生N个随机值,将它们求和,然后将常数和除以随机和,然后将每个随机数乘以这个商,就像这里提出的那样。 我不能采用这些解决方案的主要问题是,我的每个随机值都有不同的范围,我需要这

  • 我非常想在两个值(,)之间生成随机整数,其和等于给定的数字。 注意:我在StackOverflow中发现了类似的问题;但是,它们并没有准确地解决这个问题(使用函数,因此数字介于0和1之间)。 例如:我需要8个0到24之间的随机数(整数),其中8个生成的数字的总和必须等于24。 感谢您的帮助。谢谢