2012-07-26 18 views
18

मैं -1, 1 श्रेणी में यादृच्छिक संख्याएं उत्पन्न करना चाहता हूं और चाहते हैं कि प्रत्येक व्यक्ति को उत्पन्न होने की समान संभावना हो। अर्थात। मैं नहीं चाहता कि चरम सीमाएं आने की संभावना कम हों। ऐसा करने का सबसे अच्छा तरीका क्या है?NumPy में यादृच्छिक संख्या पाने का सबसे अच्छा तरीका क्या है?

अब तक, मैं का इस्तेमाल किया है:

2 * numpy.random.rand() - 1 

और यह भी:

2 * numpy.random.random_sample() - 1 
+2

क्या आपके पास आपके द्वारा उपयोग किए जाने वाले दृष्टिकोण के साथ कोई समस्या है? –

+0

@ स्वेन समस्या यह है कि मैं यह सुनिश्चित नहीं कर सकता कि चरम सीमाएं अन्य सभी संभावनाओं के रूप में चुनी जाने की संभावना है। – wot

उत्तर

27

आपका दृष्टिकोण ठीक है।

>>> numpy.random.uniform(-1, 1, size=10) 
array([-0.92592953, -0.6045348 , -0.52860837, 0.00321798, 0.16050848, 
     -0.50421058, 0.06754615, 0.46329675, -0.40952318, 0.49804386]) 

चरम सीमाओं के लिए संभावना के बारे में:: एक वैकल्पिक समारोह numpy.random.uniform() उपयोग करने के लिए है यह आदर्शवादी किया जाएगा, तो निरंतर यादृच्छिक संख्या, संभावना चरम सीमाओं में से एक प्राप्त करने के लिए 0. होगा के बाद से चल बिन्दु संख्या हैं निरंतर वास्तविक संख्याओं का एक विघटन, वास्तविकता में कुछ चरम सीमाएं प्राप्त करने के लिए कुछ सकारात्मक संभावनाएं हैं। यह विघटन त्रुटि का कुछ रूप है, और यह लगभग निश्चित है कि यह त्रुटि आपके सिमुलेशन में अन्य त्रुटियों से बौद्ध हो जाएगी। चिंता करना बंद करो!

+0

@wok: चरम पर एक टिप्पणी जोड़ा गया। –

+0

धन्यवाद स्वेन। मैं चिंता करने की कोशिश करूंगा और रोकूँगा :-) लेकिन आसानी से किया जाने से कहा। – wot

+0

ध्यान दें कि दोनों तरीकों में अंतराल आधा खुला है, इसलिए ऊपरी बाउंड संभाव्यता 0 – ecatmur

2

प्रलेखन से numpy.random.random_sample के लिए:

परिणाम घोषित अंतराल पर "निरंतर वर्दी" वितरण से कर रहे हैं। नमूने के लिए Unif [ए, बी), b> random_sample के उत्पादन (b-a) से गुणा करें और a जोड़ें:

(b - a) * random_sample() + a 

प्रति स्वेन Marnach का जवाब, प्रलेखन शायद संदर्भ के लिए numpy.random.uniform को अद्यतन करने की जरूरत है।

+0

हां, यही वह जगह है जहां मैंने पहली बार चेक किया था। धन्यवाद। – wot

3

ध्यान दें कि numpy.random.rand एक कॉल पर एक समान वितरण से कई नमूने उत्पन्न करने के लिए अनुमति देता है:

>>> np.random.rand(5) 
array([ 0.69093485, 0.24590705, 0.02013208, 0.06921124, 0.73329277]) 

इसे किसी विशेष आकार में नमूने उत्पन्न करने के लिए अनुमति देता है:

>>> np.random.rand(3,2) 
array([[ 0.14022471, 0.96360618], 
     [ 0.37601032, 0.25528411], 
     [ 0.49313049, 0.94909878]]) 

के रूप में आपने कहा था, समान रूप से [-1, 1) के बीच वितरित यादृच्छिक संख्याओं के साथ उत्पन्न किया जा सकता है:

>>> 2 * np.random.rand(5) - 1 
array([ 0.86704088, -0.65406928, -0.02814943, 0.74080741, -0.14416581])