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
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较小的值导致更大的方差
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)
添加回答
举报