Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何生成固定数量的正整数的随机正态分布,这些正整数的总和为固定值_Python_Algorithm_Numpy_Math_Random - Fatal编程技术网

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

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(

问题是:随机生成n个正整数,这些正整数的和为固定值,服从正态分布


如何在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所需要的。