如何生成固定数量的正整数的随机正态分布,该正整数总和为固定值

时间:2018-05-18 08:09:07

标签: python algorithm numpy math random

问题是:随机生成 n 正整数,总和达到固定值 sum 并遵循正态分布。

我如何在Python中实现这一目标?

1 个答案:

答案 0 :(得分:2)

一种方法可能如下:想一下( sum - 1)位的数组。选择它们( n - 1)为1,其余为0.现在在它们之间,以及在第一个之前和之后,你运行零个或多个零。取每次运行的长度,加1(将非负值变为正数),你有 n 正整数,加起来 sum

从实现的角度来看,你真的不需要那个数组;你所需要的只是那些人的位置。确保它们是不同的,并确保它们介于0和 sum 之间 - 1独占。

def random_partition(n, sum):
  indices = [-1] + sorted(random.sample(range(sum - 1), n - 1)) + [sum - 1]
  return [indices[i + 1] - indices[i] for i in range(n)]

生成的整数将遵循正态分布。正如评论已经指出的那样,正态分布是连续分布,而您正在请求整数,因此您需要离散分布。我想这也不是二项式分布。但是,由于您似乎对您需要完全的分布有点模糊,这可能与正态分布足够接近以满足您的需求。老实说,我不知道你得到的发行名称;可能想检查一下Cross Validated

相关问题