Javascript 如何求和等于M的N个随机整数

Javascript 如何求和等于M的N个随机整数,javascript,python,numpy,dirichlet,Javascript,Python,Numpy,Dirichlet,我想列出N个随机整数,它们的和等于M 我在Python中使用了numpy和dirichlet函数,但这会生成双随机数数组,我想生成整数随机数 import numpy as np np.random.dirichlet(np.ones(n))*m 该解决方案可以使用其他分发解决问题。以下是一个示例解决方案: 将numpy导入为np M=50#固定和 N=5#数字的数量 数组=np.随机多项式(M,np.一(N)/N)[0] 打印(数组) 使用dirichlet的问题在于它是实数的分布。它将产

我想列出N个随机整数,它们的和等于M

我在Python中使用了numpy和dirichlet函数,但这会生成双随机数数组,我想生成整数随机数

import numpy as np 
np.random.dirichlet(np.ones(n))*m

该解决方案可以使用其他分发解决问题。

以下是一个示例解决方案:

将numpy导入为np
M=50#固定和
N=5#数字的数量
数组=np.随机多项式(M,np.一(N)/N)[0]
打印(数组)

使用
dirichlet
的问题在于它是实数的分布。它将产生一个范围为
(0,1)
的数字向量,其总和为1,但截断或四舍五入可能会取消对特定总和的保证。下面我们可以从
多项式分布(使用)中获得所需的效果,如下所示:

from numpy.random import multinomial

np.random.multinomial(m, np.ones(n)/n)

这将在
0
m
之间生成
n
整数,其总和为
m
,绘制给定位置的概率相等。可视化这一点的最简单的方法是考虑结果,从一组固定的对象描述一组绘图(例如,从1到6的整数的骰子绘图),其中最后的数组是绘制相应对象的次数。总数将始终等于给定的总绘制数(卷)。

请注意,Dirichlet分布可用于对多项式进行参数化,从而控制料仓的平滑度或“均匀性”,例如:

import numpy as np 

m = 50
n = 5
s = 0.1

np.random.multinomial(m, np.random.dirichlet(np.ones(n) * s))

主要参数化为@Bonfire,但较大的
s
(例如,try
s=100
)会导致垃圾箱接近泊松分布,平均值=
m/n
,较小的值会导致更大的方差

整数有分布吗?我收回了我的评论,因为我看到你在乘以
m
,所以你最终得到了一些可以被截断的东西,但事实仍然是,根据定义,Dirichlet是实数的分布。二项式分布和泊松分布是两种常见的离散分布,但它们没有你想要的求和特性。看来多项式是最好的选择。这个分布将不同于Dirichlet,但是数字将相加,如果截断Dirichlet,这是不保证的。非常感谢,它解决了我的问题。我已经编辑了这个问题,这样你就可以回答我的问题了。不用担心。我真的不在乎这个问题是否被接受,我最感兴趣的是找到答案。我写了一个答案,只是因为我的信息到处都是。