2009-01-25 104 views
22

在無偏見的投幣機中,H或T發生50%的次數。如何模擬python中偏向硬幣的翻轉?

但我想模擬硬幣,它給概率'p'的H和概率'(1-p)'的T。

是這樣的:

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:如果不是`更好{TRUE: 'H',假: 'T'} [random.random() 2009-01-25 14:13:42

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

一個返回boolean值,然後您可以使用選擇H或T(或任何兩個值之間選擇),你想要的。您也可以在方法中包含選項:

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

但是這種方式通常不會那麼有用。

0
  • 導入0之間的隨機數 - 1(可使用randrange功能)

  • 如果數字爲上述(1-P),返回尾巴。

  • 否則,返回頭

8

你想要的 「偏見」 是基於對稱distribuition?或者也許是指數分佈?高斯人?

那麼,這裏是所有的方法,從隨機文件本身提取。

首先,三角形分佈的一個例子:

print random.triangular(0, 1, 0.7) 

random.triangular(low, high, mode)

返回一個隨機浮點數N使得low <= N < high和 與 邊界之間的指定的模式。 lowhigh界限 默認爲一個mode 參數默認爲邊界之間的中點 ,給出對稱的 分佈。

random.betavariate(alpha, beta)

Beta分佈。參數條件是alpha > 0beta > 0。返回值範圍在01之間。

random.expovariate(lambd)

指數分佈。 lambd1.0 除以所需的平均值。它應該是 是非零。 (該參數將是 稱爲「lambda」,但是這是在Python 保留字。)返回 值的範圍從0正 無窮如果lambd是正的,並且 從負無窮0如果lambd 是負數。

random.gammavariate(alpha, beta)

Gamma分佈。 (不是gamma 函數!) 參數的條件是alpha > 0beta > 0

random.gauss(mu, sigma)

高斯分佈。 mu是平均值,而sigma是標準差 。這比以下定義的normalvariate()函數 稍快 。

random.lognormvariate(mu, sigma)

數正態分佈。如果您採用 這個 分佈的自然對數,您將得到一個正態分佈 ,分佈均值爲mu和標準 偏差sigmamu可以有任何 值,並且sigma必須大於

random.normalvariate(mu, sigma)

正態分佈。 mu是平均值, 和sigma是標準差。

random.vonmisesvariate(mu, kappa)

mu是平均角度,02*pi,和kappa 之間表達 弧度是濃度參數,該參數 必須大於或等於零。 如果kappa等於,這 分佈在範圍02*pi降低至均勻 隨機角度。

random.paretovariate(alpha)

帕累託分佈。 alpha是 形狀參數。

random.weibullvariate(alpha, beta)

Weibull分佈。 alpha是 比例參數,而beta是 參數的形狀。

+3

非常豐富。 – 2009-01-28 04:21:48

3

如何:

import numpy as np 
n, p = 1, .33 # n = coins flipped, p = prob of success 
s = np.random.binomial(n, p, 100)