代码之家  ›  专栏  ›  技术社区  ›  Pratik Deoghare

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

  •  24
  • Pratik Deoghare  · 技术社区  · 15 年前

    在无偏硬币中,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]
    
    5 回复  |  直到 10 年前
        1
  •  45
  •   Federico A. Ramponi    15 年前

    random.random() 返回A 均匀分布 范围[0,1]中的伪随机浮点数。这个数字小于给定的数字 p 在[0,1)的概率范围内 . 因此:

    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 
    
        2
  •  8
  •   nosklo    15 年前

    是否希望“偏差”基于对称分布?或者可能是指数分布?高斯有人吗?

    好吧,这里有所有的方法,都是从随机文档中提取出来的。

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

    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) :

    指数分布。 lambd 1.0 除以期望的平均值。它应该 是 非零 . (参数为 被称为“爱” lambda __,但这是 python中的保留字。)返回 值的范围从 积极的 无穷 如果 兰伯德 是积极的,并且 从 负无穷大 如果 兰伯德 是否定的。

    random.gammavariate(alpha, beta) :

    伽马分布。(不是伽马 函数!条件 参数是 Alpha & Gt;0 β& gt;0 .

    random.gauss(mu, sigma) :

    高斯分布。 mu 是中庸,而且 sigma 是标准 偏离。这个稍微快一点 比 normalvariate() 功能 定义如下。

    random.lognormvariate(mu, sigma) :

    对数正态分布。如果你采取 这个的自然对数 分布,你会得到一个正态 平均分布 标准 偏离 西格玛 . 可以有任何 价值,以及 西格玛 必须大于 .

    random.normalvariate(mu, sigma) :

    正态分布。 是平均值, 和 西格玛 是标准偏差。

    random.vonmisesvariate(mu, kappa) :

    是平均角,用 弧度间 2*pi kappa 是浓度参数,其中 必须大于或等于 . 如果 卡帕 等于 ,这个 分布减少为均匀分布 范围内的随机角度 2×PI .

    random.paretovariate(alpha) :

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

    random.weibullvariate(alpha, beta)

    威布尔分布。 阿尔法 是 比例参数和 beta 是形状 参数。

        3
  •  4
  •   David Z    15 年前
    import random
    def flip(p):
        return (random.random() < p)
    

    它返回一个布尔值,您可以使用它来选择H或T(或在任意两个值之间进行选择)。您还可以在方法中包括选择:

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

    但这样做一般不会那么有用。

        4
  •  4
  •   ticktock    10 年前

    怎么样:

    import numpy as np
    n, p = 1, .33  # n = coins flipped, p = prob of success
    s = np.random.binomial(n, p, 100)
    
        5
  •  0
  •   Paul    15 年前
    • 导入介于0-1之间的随机数(可以使用RandRange函数)

    • 如果数字高于(1-p),返回尾部。

    • 否则,返回头

    推荐文章