Python 如何生成固定数量的正整数的随机正态分布,这些正整数的总和为固定值
问题是:随机生成n个正整数,这些正整数的和为固定值,服从正态分布Python 如何生成固定数量的正整数的随机正态分布,这些正整数的总和为固定值,python,algorithm,numpy,math,random,Python,Algorithm,Numpy,Math,Random,问题是:随机生成n个正整数,这些正整数的和为固定值,服从正态分布 如何在Python中实现这一点?一种方法可能是:考虑一个(sum)数组− 1) 点点滴滴。选择(n)− 1) 其中1个为1,其余为0。现在,在1之间,以及在第一个1之前和最后一个之后,有0个或更多的0运行。取每次运行的长度,加1(将非负变为正),就有n个正整数相加 从实现的角度来看,您并不真正需要该数组;你所需要的只是一个人的位置。确保它们是不同的,并且确保它们在0和sum之间− 1独家 def random_partition(
如何在Python中实现这一点?一种方法可能是:考虑一个(sum)数组− 1) 点点滴滴。选择(n)− 1) 其中1个为1,其余为0。现在,在1之间,以及在第一个1之前和最后一个之后,有0个或更多的0运行。取每次运行的长度,加1(将非负变为正),就有n个正整数相加 从实现的角度来看,您并不真正需要该数组;你所需要的只是一个人的位置。确保它们是不同的,并且确保它们在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)]
结果整数将不遵循正态分布。正如前面的注释所指出的,正态分布是连续分布,而您需要整数,因此需要离散分布。我猜这也不完全是二项分布。但是,因为你似乎对你需要的确切分布有点模糊,也许这已经足够接近正态分布来满足你的需求了。老实说,我不知道你会得到的发行名;可能需要对此进行检查。AFAIK整数(离散的)不能遵循正态分布(连续的)。您必须创建“抛硬币树”,并以50%左右的概率通过该树迭代计算结果,例如100枚硬币。建议在树中有多个/用户可定义的层数。或者:你真的需要澄清你想要什么。你想要一个近似正态分布的二项分布吗?我真的需要整理一下我的统计数据。是的,我想要一个近似正态分布的二项分布。谢谢你指出。这个分布是等概率的:每一个可能的值的有序列表加起来等于
n
都有相同的概率。这很可能是OP所需要的。