为了账号安全,请及时绑定邮箱和手机立即绑定

如何获得总和等于M的N个随机整数

如何获得总和等于M的N个随机整数

繁华开满天机 2022-01-20 17:25:32
我想列出 N 个随机 INTEGER 数,其总和等于 M 数。我在 Python 中使用了 numpy 和 dirichlet 函数,但这会生成双随机数数组,我想生成整数随机数。import numpy as np  np.random.dirichlet(np.ones(n))*m解决方案可以使用其他分布,感觉就是解决问题。
查看完整描述

3 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

使用它的问题dirichlet在于它是实数的分布。它将产生一个范围内的数字向量(0,1),总和为 1,但截断或舍入它们可能会消除对特定总和的保证。在这篇文章之后,我们可以从分布中获得所需的效果multinomial(使用np.random.multinomial),如下所示:


from numpy.random import multinomial


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

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


查看完整回答
反对 回复 2022-01-20
?
哔哔one

TA贡献1854条经验 获得超8个赞

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


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)导致 bin 以 mean= 接近 Poisson,m/n较小的值导致更大的方差


查看完整回答
反对 回复 2022-01-20
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

这是一个示例解决方案:


import numpy as np


M = 50 # The fixed sum

N = 5 # The amount of numbers


array = np.random.multinomial(M, np.ones(N) / N)[0]

print(array)


查看完整回答
反对 回复 2022-01-20
  • 3 回答
  • 0 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信