numpy.random.dirichlet

numpy.random.dirichlet(alpha, size=None)

从Dirichlet分布绘制样本。

从Dirichlet分布绘制尺寸k的尺寸样本。Dirichlet分布随机变量可以看作是Beta分布的多元泛化。Dirichlet pdf是贝叶斯推理中多项式的共轭前缀。

参数:

alpha:数组

分布参数(k维的样本维度k)。

size:int或tuple的整数,可选

输出形状。如果给定形状是例如(m, n, k),则 m * n * k默认值为None,在这种情况下返回单个值。

返回:

samples:ndarray,

绘制的样本,形状(大小,alpha.ndim)。

笔记

使用以下属性进行计算:对于每个维,从形状alpha_i的标准伽马生成器绘制随机样本y_i,然后X = \frac{1}{\sum_{i=1}^k{y_i}} (y_1, \ldots, y_n)是Dirichlet分布。

参考文献

[R214]David McKay,“Information Theory,Inference and Learning Algorithms”,第23章,http://www.inference.phy.cam.ac.uk/mackay/
[R215]维基百科,“Dirichlet分布”,http://en.wikipedia.org/wiki/Dirichlet_distribution

例子

以维基百科中引用的示例为例,如果想要将字符串(每个初始长度为1.0)切割成不同长度的K个字节,则可以使用该分布,其中每个字段平均具有指定的平均长度,但允许一些变化相对尺寸的碎片。

>>> s = np.random.dirichlet((10, 5, 3), 20).transpose()
>>> plt.barh(range(20), s[0])
>>> plt.barh(range(20), s[1], left=s[0], color='g')
>>> plt.barh(range(20), s[2], left=s[0]+s[1], color='r')
>>> plt.title("Lengths of Strings")