2009-01-25 15 views
22

निष्पक्ष सिक्का फ्लिप एच या टी में 50% बार होता है।मैं पाइथन में पक्षपातपूर्ण सिक्का की फ्लिप कैसे अनुकरण करूं?

लेकिन मैं सिक्का अनुकरण करना चाहता हूं जो संभाव्यता 'पी' और टी संभाव्यता '(1-पी)' के साथ एच देता है।

कुछ इस तरह:

def flip(p): 
    '''this function return H with probability p''' 
    # do something 
    return result 

>> [flip(0.8) for i in xrange(10)] 
[H,H,T,H,H,H,T,H,H,H] 

उत्तर

41

random.random() रेंज [0 में एक समान रूप से वितरित छद्म यादृच्छिक चल बिन्दु संख्या दिखाता है लौटने के लिए, 1)। यह संख्या p के साथ सीमा [0,1) में दिए गए नंबर p से कम है। इस प्रकार:

def flip(p): 
    return 'H' if random.random() < p else 'T' 

कुछ प्रयोग:

>>> N = 100 
>>> flips = [flip(0.2) for i in xrange(N)] 
>>> float(flips.count('H'))/N 
0.17999999999999999 # Approximately 20% of the coins are heads 

>>> N = 10000 
>>> flips = [flip(0.2) for i in xrange(N)] 
>>> float(flips.count('H'))/N 
0.20549999999999999 # Better approximation 
+1

+1: यदि 'की तुलना में बेहतर {यह सच है:" एच ", गलत: 'टी'} [random.random()

4
import random 
def flip(p): 
    return (random.random() < p) 

एक बूलियन है जिसे आप एच या टी चयन करने के लिए (या किसी भी दो मानों के बीच चयन) आप चाहते हैं का उपयोग कर सकते रिटर्न है। आप विधि में विकल्प भी शामिल कर सकते हैं:

def flip(p): 
    if random.random() < p: 
     return 'H' 
    else: 
     return 'T' 

लेकिन यह आमतौर पर कम आम तौर पर उपयोगी होगा।

0
  • आयात 0 के बीच एक यादृच्छिक संख्या - 1

  • (आप randrange फ़ंक्शन का उपयोग कर सकते हैं) संख्या के ऊपर (1-पी) है, तो पूंछ वापस जाएँ।

  • वरना, सिर

8

आप "पूर्वाग्रह" सममित distribuition में आधारित करना चाहते हैं? या शायद घातीय वितरण? गॉसियन कोई भी?

ठीक है, यादृच्छिक दस्तावेज से निकाले गए सभी विधियां यहां हैं।

पहले, त्रिकोणीय वितरण का एक उदाहरण:

print random.triangular(0, 1, 0.7) 

random.triangular(low, high, mode):

वापसी एक यादृच्छिक चल बिन्दु संख्या N ऐसी है कि उन सीमा के बीच निर्दिष्ट मोड के साथ low <= N < high और । low और high सीमा शून्य और एक पर डिफ़ॉल्ट। mode तर्क सीमाओं के बीच मध्य बिंदु पर डिफ़ॉल्ट रूप से डिफ़ॉल्ट है, जो एक सममित वितरण प्रदान करता है।

random.betavariate(alpha, beta):

बीटा वितरण। पैरामीटर पर स्थितियां alpha > 0 और beta > 0 हैं।लौटाए गए मान 0 और 1 के बीच हैं।

random.expovariate(lambd):

घातीय वितरण। lambd1.0 वांछित मतलब से विभाजित है। यह nonzero होना चाहिए। (पैरामीटर "lambda" कहा जाता होगा, लेकिन है कि अजगर में एक आरक्षित शब्द है।) वापस किया गया मूल्यों से 0के लिए सकारात्मक अनंत अगर lambd सकारात्मक है लेकर, और नकारात्मक अनंत से 0 को यदि lambd नकारात्मक है।

random.gammavariate(alpha, beta):

गामा वितरण। (गामा फ़ंक्शन नहीं है!) पैरामीटर पर स्थितियां alpha > 0 और beta > 0 हैं।

random.gauss(mu, sigma):

गाऊसी वितरण। mu मतलब है, और sigma मानक विचलन है। यह normalvariate() फ़ंक्शन से नीचे परिभाषित थोड़ा तेज़ है।

random.lognormvariate(mu, sigma):

लॉग सामान्य वितरण। यदि आप इस वितरण के प्राकृतिक लॉगरिदम लेते हैं, तो आपको सामान्य औसत mu और मानक विचलन sigma के साथ वितरण मिलेगा। mu कोई मान हो सकता है, और sigma शून्य से अधिक होना चाहिए।

random.normalvariate(mu, sigma):

सामान्य वितरण। mu मतलब है, और sigma मानक विचलन है।

random.vonmisesvariate(mu, kappa):

mu मतलब कोण है, 0 और 2*pi, और kappa के बीच रेडियन में व्यक्त एकाग्रता पैरामीटर, जो से अधिक या शून्य के बराबर होना चाहिए है। तो kappaशून्य के बराबर है, इस वितरण रेंज 2*pi को 0 पर एक वर्दी यादृच्छिक कोण को कम करता है।

random.paretovariate(alpha):

परेटो वितरण। alpha आकार पैरामीटर है।

random.weibullvariate(alpha, beta)

वेइबुल बंटन। alpha स्केल पैरामीटर और beta आकार पैरामीटर है।

+3

बहुत जानकारीपूर्ण। –

3

कैसे के बारे में:

import numpy as np 
n, p = 1, .33 # n = coins flipped, p = prob of success 
s = np.random.binomial(n, p, 100) 
संबंधित मुद्दे