Pythonでバイアスされたコインのフリップをどのようにシミュレートしますか?
-
20-08-2019 - |
質問
バイアスのないコインフリップでは、HまたはTが50%発生します。
しかし、Hを確率「p」で、Tを確率「(1-p)」で与えるコインをシミュレートしたい。
次のようなもの:
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]
解決
random.random()
は、範囲[0、1)の均一に分布した擬似ランダム浮動小数点数を返します。この数は、範囲[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
他のヒント
<!> quot; bias <!> quot;対称分布に基づいているか?それとも指数関数的な分布ですか?ガウスの誰か?
さて、これはランダムなドキュメント自体から抽出されたすべてのメソッドです。
まず、三角分布の例:
print random.triangular(0, 1, 0.7)
random.triangular(low, high, mode)
:
N
となるようなランダムな浮動小数点数low <= N < high
を返します それらの間に指定されたモードで 境界。low
およびhigh
境界 デフォルトは zero および one です。mode
引数のデフォルトは中点です 境界間、対称を与える 配布。
random.betavariate(alpha, beta)
:ベータ分布。パラメーターの条件は
alpha > 0
およびbeta > 0
。返される値の範囲は0
〜1
です。
random.expovariate(lambd)
:指数分布。
lambd
は1.0
です 目的の平均で割った値。そうすべき 非ゼロである。 (パラメーターは <!>#8220;lambda
<!>#8221;と呼ばれますが、それは Pythonの予約語。)返される 値の範囲はrandom.gammavariate(alpha, beta)
〜 positiverandom.gauss(mu, sigma)
が正の場合、無限mu
の場合、負の無限大からsigma
まで 負です。
normalvariate()
:ガンマ分布。 (ガンマではありません 機能!)の条件 パラメータは
random.lognormvariate(mu, sigma)
およびrandom.normalvariate(mu, sigma)
です。
random.vonmisesvariate(mu, kappa)
:ガウス分布。
2*pi
は平均で、kappa
は標準です 偏差。これは少し速いですrandom.paretovariate(alpha)
関数より 以下で定義します。
alpha
:正規分布を記録します。取ったら これの自然対数 配布、あなたは<!>#8217;通常を取得します 平均
random.weibullvariate(alpha, beta)
および標準の分布 偏差beta
。 <=>は任意のものを持つことができます 値、および<=>は ゼロ。<=> :
正規分布。 <=>は平均、 <=>は標準偏差です。
<=> :
<=>は平均角度で、 <=>と<=>の間のラジアン、および<=> 濃度パラメータであり、 ゼロ以上でなければなりません。 <=>が zero と等しい場合、これは 分布は均一になります <=>から<=>までの範囲にわたるランダムな角度。
<=> :
パレート分布。 <=>は 形状パラメーター。
<=>
ワイブル分布。 <=>は スケールパラメーターと<=>は形状 パラメータ。
import random
def flip(p):
return (random.random() < p)
これはブール値を返すので、これを使用してHまたはTを選択(または任意の2つの値から選択)できます。メソッドに選択肢を含めることもできます。
def flip(p):
if random.random() < p:
return 'H'
else:
return 'T'
しかし、一般的にはそれほど有用ではありません。
方法:
import numpy as np
n, p = 1, .33 # n = coins flipped, p = prob of success
s = np.random.binomial(n, p, 100)
-
0から1の間の乱数をインポートします(randrange関数を使用できます)
-
数値が(1-p)より大きい場合、末尾を返します。
-
その他、ヘッドを返す