2012-05-18 5 views
6

파이썬에서 Dirichlet 배포판에 대한 pdf를 계산하고 싶지만 모든 종류의 표준 라이브러리에서 코드를 찾을 수 없었습니다. scipy.stats는 배포판의 긴 목록을 포함하지만 Dirichlet을 포함하지 않는 것으로 보이며 numpy.random.mtrand는 한 샘플을 허용하지만 pdf는 제공하지 않습니다.파이썬 Dirichlet 배포판의 PDF 계산

Dirichlet은 꽤 흔한 일이기 때문에 scipy.stats 또는 이와 유사하게 검색해야하는 다른 이름이 있는지 궁금한 점이 있거나 어떻게 든 놓친 것일 수도 있습니다.

답변

4

numpy에서 코드를 찾을 수 없지만 구현하기에 충분합니다. 여기에 못생긴 작은 1 라이너가 있습니다. (x = [x1, ..., xk]와 alpha = [a1, ..., ak]를 제공해야한다는 것을 제외하고는 Wikipedia에서 주어진 함수를 따랐다.

import math 
import operator 

def dirichlet_pdf(x, alpha): 
    return (math.gamma(sum(alpha))/
      reduce(operator.mul, [math.gamma(a) for a in alpha]) * 
      reduce(operator.mul, [x[i]**(alpha[i]-1.0) for i in range(len(alpha))])) 

경고 : 테스트하지 않았습니다. 작동하는지 알려주세요.

+0

감사합니다. 아무도 이미 어딘가에있는 것을 지적하지 않으면 비슷한 것을 쓸 계획이었습니다. – jpmccoy

+0

2016+에서이 게시물을 보는 사람들은 아래의 scipy.stats 솔루션을 사용하십시오! 이제 추가되었습니다. –

-1

감마 분포에서 Dirichlet 분포를 유도 할 수 있습니다. 이것은 wikipedia page에 표시됩니다. 이 파이썬 코드를 찾으십시오.

params = [a1, a2, ..., ak] 
    sample = [random.gammavariate(a,1) for a in params] 
    sample = [v/sum(sample) for v in sample] 
+0

. 나는 pdf를 원해. pdf 공식은 상당히 간단하며 구현할 수도 있지만 Dirichlet이 scipy 나 비슷한 곳에 숨어 있다면 유용 할 것입니다. – jpmccoy

-2

나는 그것이 numpy.random.mtrand.dirichlet에 포함될 수 있다고 생각하지만, 그것이 pdf인지 또는 샘플링인지 확실하지 않습니다.

+0

샘플링 용입니다. –

3

scipy version 0.15로, 당신은 scipy.stats.dirichlet.pdf 이 (here 참조)를 사용할 수 있습니다

디리클레에서 샘플링의
관련 문제