मैं अजगर, इसलिए बजाय जोखिम वाक्यविन्यास त्रुटियों का प्रयोग नहीं करते मैं समाधान का वर्णन करने की कोशिश करेंगे: हालांकि, वह SciPy का उपयोग कर इसे scipy.rv_discrete
उपयोग कर अपने खुद असतत वितरण समारोह को परिभाषित करने के लिए आसान है एल्गोरिदम रूप से। यह एक क्रूर बल असंगत उलटा है। इसे पाइथन में आसानी से अनुवाद करना चाहिए। मैं सरणी के लिए 0-आधारित अनुक्रमण मान रहा हूँ।
सेटअप:
पहली प्रविष्टि, शेष प्रविष्टियों के लिए cdf[i] = cdf[i-1] + 1/(i+1)**a
के रूप में आकार m
की एक सरणी cdf
cdf[0] = 1
साथ उत्पन्न करें।
प्रत्येक में cdf[m-1]
को विभाजित करके सभी प्रविष्टियों को स्केल करें - अब वे वास्तव में सीडीएफ मान हैं।
उपयोग:
- एक वर्दी (0,1) और
cdf[]
के माध्यम से खोज पैदा करके आपका यादृच्छिक मान उत्पन्न जब तक आप एक प्रविष्टि अपने वर्दी से अधिक लगता है। इंडेक्स + 1 को अपने x
-value के रूप में वापस करें।
जितना चाहें उतने x
के लिए दोहराएं।
उदाहरण के लिए, a,m = 2,10
के साथ, मैं संभावनाओं की गणना सीधे रूप में:
[0.6452579827864142, 0.16131449569660355, 0.07169533142071269, 0.04032862392415089, 0.02581031931145657, 0.017923832855178172, 0.013168530260947229, 0.010082155981037722, 0.007966147935634743, 0.006452579827864143]
और CDF है:
[0.6452579827864142, 0.8065724784830177, 0.8782678099037304, 0.9185964338278814, 0.944406753139338, 0.9623305859945162, 0.9754991162554634, 0.985581272236501, 0.9935474201721358, 1.0]
है, पैदा करता है, तो मैं 0.90 की एक वर्दी परिणाम मैं वापसी होगी मिला x=4
क्योंकि 0.918 ... मेरी वर्दी से बड़ी सीडीएफ प्रविष्टि बड़ी है।
यदि आप गति के बारे में चिंतित हैं तो आप उपनाम तालिका बना सकते हैं, लेकिन ज्यामितीय क्षय के साथ सरणी के माध्यम से एक रैखिक खोज की प्रारंभिक समाप्ति की संभावना काफी अधिक है। उदाहरण के लिए, उदाहरण के लिए, आप उस समय के लगभग 2/3 पहली चोटी पर समाप्त कर देंगे।
क्यों निर्मित बिजली कानून वितरण के साथ अस्वीकृति नमूना न करें? –