主要参考的是:https://www.douban.com/note/45584915/
和 http://www.biostatistic.net/thread-33740-1-1.html
最近需要用到狄利克雷分布,但是找了半天发现matlab没有现成的工具可用。只能自己实现,下面是我搜到的一个实现狄利克雷分布的matlab代码
function r = drchrnd(a,n)
% take a sample from a dirichlet distribution
p = length(a);
r = gamrnd(repmat(a,n,1),1,n,p);
r = r ./ repmat(sum(r,2),1,p);
用法:
a= drchrnd([1 1 1],10)
(此代码不充分解释:充分利用了dirichlet distribution和gamma分布之间的关系。经过推导可以证明,dirichlet distribution可以看作是多个gamma(ai,1)的乘积(包括除)。同时利用了gamma的分布的一个重要性质,xi~gamma(ai,b)分布,则sum(xi)~gamma(sum(ai),b)分布。)
除了matlab,R语言也有狄利克雷分布的实现函数。
Dirichlet(DIRECT)
Dirichlet()所属R语言包:DIRECT
用法为:rDirichlet (n, alpha)
参数:alpha
Shape parameter vector.
可以认为是确定输出向量的列数
参数:n
Number of realizations (vectors) to generate.
生成alpha向量的维数(即确定输出向量的行数)
以上是我找到的狄利克雷分布的实现