如何在python中模拟偏置硬币的翻转?

Pra*_*are 25 python random probability coin-flipping sympy

在无偏硬币翻转中,H或T发生50%的次数.

但我想模拟硬币给出概率为'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]
Run Code Online (Sandbox Code Playgroud)

Fed*_*oni 45

random.random()返回[0,1]范围内均匀分布的伪随机浮点数.该数字小于p[0,1]范围内的给定数字且具有概率p.从而:

def flip(p):
    return 'H' if random.random() < p else 'T'
Run Code Online (Sandbox Code Playgroud)

一些实验:

>>> 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 
Run Code Online (Sandbox Code Playgroud)


nos*_*klo 8

你是否希望"偏见"基于对称分布?或者也许是指数分布?高斯有人吗?

好吧,以下是从随机文档中提取的所有方法.

首先,三角分布的一个例子:

print random.triangular(0, 1, 0.7)
Run Code Online (Sandbox Code Playgroud)

random.triangular(low, high, mode):

返回一个随机浮点数N,以便low <= N < high在这些边界之间使用指定的模式.在lowhigh边界默认一个.该mode 参数默认为边界之间的中点,给人一种对称分布.

random.betavariate(alpha, beta):

Beta分发.参数的条件是alpha > 0beta > 0.返回值介于0和之间1.

random.expovariate(lambd):

指数分布.lambd1.0 由所希望的平均分.它应该是非零的.(该参数将被称为" lambda",但是这是在Python保留字.)返回值的范围从0正无穷大,如果lambd是正的,和从负无穷大0如果lambd 是负的.

random.gammavariate(alpha, beta):

Gamma分布.(不是伽玛函数!)参数的条件是alpha > 0beta > 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等于,该分布减少到超过范围的均匀随机角度02*pi.

random.paretovariate(alpha):

帕累托分布.alpha是形状参数.

random.weibullvariate(alpha, beta)

威布尔分布.alpha是scale参数,beta是形状参数.


Dav*_*d Z 5

import random
def flip(p):
    return (random.random() < p)
Run Code Online (Sandbox Code Playgroud)

这将返回一个布尔值,然后您可以使用它来选择您想要的 H 或 T(或在任何两个值之间进行选择)。您还可以在方法中包含选择:

def flip(p):
    if random.random() < p:
        return 'H'
    else:
        return 'T'
Run Code Online (Sandbox Code Playgroud)

但那样一般用处不大。


tic*_*ock 5

怎么样:

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