python - Assign sampled multinomial values uniformly at random -


मैं एक बहुपक्षीय वितरण का नमूना करने के लिए np.random.multinomial का उपयोग कर रहा हूं M बार (दी संभाव्यता [X_0 X_1 .. X_n] यह निर्दिष्ट बहुविध से नमूना है, जहां \ sum_i [C_0 C_1 ... C_n] देता है C_i = M )। इन नमूने मूल्यों ( C_i 's) को देखते हुए, मैं उन वस्तुओं को समान रूप से असाइन करना चाहता हूं जो मेरे पास हैं

अब मैं क्या कर रहा हूं:

  ड्रॉ = np.random.multinomial (M, probs, size = 1) ड्रॉ करता है = ड्रॉ करता है [0] draws_list = [ ] आईडीएक्स के लिए, एन्यूमरेट (ड्रॉ) में संख्या: ड्रॉ्स_लिस्ट + = [idx] * num random.shuffle (draws_list)   

तब draws_list एक बेतरतीब ढंग से फेरबदल की सूची है नमूना मूल्यों का

समस्या यह है कि draws_list (लूप के लिए) लोकप्रिय है बहुत धीमा है क्या ऐसा करने के लिए एक बेहतर / तेज़ तरीका है?

इस कोड को आज़माएं यह रणनीति पहले स्मृति को आवंटित करने के लिए है, फिर डेटा भरने के लिए।

  draws_list1 = np.empty (एम, dtype = np.int) एडी = 0 एडेक्स के लिए, एनएम एन्यूमरेट (ड्रॉ) : Draws_list1 [acc: acc + num] .फ़ाइल (idx) एसीसी + = num   

प्रोफ़ाइल के लिए यहाँ पूर्ण कोड है एनपी आयात सीप्रोफ़ाइल एम = 10000000 ड्रॉ के रूप में नमूनों को आयात करें = np.random.multinomial (M, [1/6।] * 6, आकार = 1) draws = draws [0] draws_list1 = np.empty (M, dtype = np.int) def impl0 (): idx के लिए, draws_list0 + [[idx] * num return_list0 def impl1 (): acc = 0 आईडीएक्स, एनएम् एन्यूमरेट (ड्रॉ) में: ड्रॉ्स_सूची 1 [एसीसी: एसीसी + एमएन] .फिल (आईडीएक्स) एसीसी + = 1 रिटर्न ड्रॉ्स_लाइट 1 सीपीआरफ़ाइल.रन ("इंफ्लिक्ट ()") सीपीआरफ़ाइल.रन ("एम्प 1 ()")

यहां cProfile का नतीजा है। यदि कथन np.empty समारोह में स्थित है impl1 , 0.020 सेकंड elapsed हैं।

  3 फ़ंक्शन 0.095 सेकंड में कॉल द्वारा आदेश: मानक नाम ncalls tottime percall cumtime percall फ़ाइल नाम: lineno (फ़ंक्शन) 1 0.020 0.020 0.095 0.095 & lt; स्ट्रिंग & gt;: 1 (& lt; मॉड्यूल & gt;) 1 0.076 0.076 0.076 0.076 prof.py:11(impl0) 1 0.000 0.000 0.000 0.000 {'_lsprof.Profiler' ऑब्जेक्ट्स के 'अक्षम'} 9 फ़ंक्शन कॉल में 0.017 सेकंड्स द्वारा क्रम: मानक नाम ncalls tottime percall cumtime percall फ़ाइल नाम: lineno (फ़ंक्शन) 1 0.000 0.000 0.017 0.017 & lt; स्ट्रिंग & gt; 1 (& lt; मॉड्यूल & gt;) 1 0.000 0.000 0.017 0.017 prof.py:17(impl1) 1 0.000 0.000 0.000 0.000 {विधि 'निष्क्रिय' '_lsprof.Profiler' ऑब्जेक्ट्स} 6 0.017 0.003 0.017 0.003 {विधि का 'भरना' numpy.ndarray 'objects}    

Comments

Popular posts from this blog

Verilog Error: output or inout port "Q" must be connected to a structural net expression -

jasper reports - How to center align barcode using jasperreports and barcode4j -

c# - ASP.NET MVC - Attaching an entity of type 'MODELNAME' failed because another entity of the same type already has the same primary key value -