我想制作一个由 N 个随机整数组成的列表,其总和等于 M 个数字。
我在Python中使用了numpy和dirichlet函数,但是这会生成双随机数数组,我想生成整数随机数。
import numpy as np
np.random.dirichlet(np.ones(n))*m
解决方案可以使用其他发行版,意义上是解决问题。
使用时出现的问题dirichlet
因为它是实数的分布。它将产生一个范围内的数字向量(0,1)
,其总和为 1,但截断或舍入它们可能会消除特定总和的保证。下列的这个帖子 http://sunny.today/generate-random-integers-with-fixed-sum/我们可以得到想要的效果multinomial
分布(使用np.random.multinomial https://docs.scipy.org/doc/numpy-1.14.1/reference/generated/numpy.random.multinomial.html#numpy.random.multinomial), 如下:
from numpy.random import multinomial
np.random.multinomial(m, np.ones(n)/n)
这将生成n
之间的整数0
and m
,其总和为m
,以相同的概率绘制给定位置。可视化这一点的最简单方法是将结果视为描述一组固定对象的绘制(例如,从 1 到 6 的整数进行骰子滚动绘制),其中最终数组是相应对象被绘制的次数。画。总数将始终等于给定的总抽奖次数(掷骰数)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)