2012-05-18 9 views
6

में Dirichlet वितरण के पीडीएफ की गणना करना मैं पाइथन में Dirichlet वितरण के लिए पीडीएफ की गणना करना चाहता हूं, लेकिन किसी भी प्रकार की मानक पुस्तकालय में ऐसा करने के लिए कोड नहीं ढूंढ पा रहा है। scipy.stats में वितरण की एक लंबी सूची शामिल है लेकिन इसमें Dirichlet शामिल नहीं है, और numpy.random.mtrand इसे से एक नमूना देता है, लेकिन पीडीएफ नहीं देता है।पायथन

चूंकि ड्रिचलेट बहुत आम है, इसलिए मुझे आश्चर्य है कि क्या कोई अन्य नाम है जिसे मुझे scipy.stats या इसी तरह से खोजना चाहिए, या फिर मैंने इसे किसी भी तरह से याद किया है या नहीं।

उत्तर

4

मुझे numpy में कोई नहीं मिला, लेकिन यह लागू करने के लिए पर्याप्त लग रहा था। यहाँ एक बदसूरत छोटा एक लाइनर है। (मैंने विकिपीडिया पर दिए गए फ़ंक्शन का पालन किया है, सिवाय इसके कि आपको x = [x1, ..., xk] और अल्फा = [ए 1, ..., एके] प्रदान करना होगा)।

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

Dirichlet से नमूने लिए है यही कारण है कि। मुझे पीडीएफ चाहिए। पीडीएफ के लिए सूत्र उचित रूप से सीधा है और मैं इसे लागू कर सकता हूं, लेकिन अगर ड्रिचलेट कहीं भी छिपी हुई है या इसी तरह यह उपयोगी होगा। – jpmccoy

-2

मुझे लगता है कि इसे numpy.random.mtrand.dirichlet पर शामिल किया जा सकता है लेकिन मुझे पूरा यकीन नहीं है कि वह पीडीएफ है या नमूनाकरण के लिए है।

+0

यह सिर्फ नमूनाकरण के लिए है –

3

scipy version 0.15 के रूप में, आप उपयोग कर सकते हैं scipy.stats.dirichlet.pdf (here देखें)