如何模拟有偏差的硬币翻转?
在无偏硬币翻转中,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]
In unbiased coin flip H or T occurs 50% of times.
But I want to simulate coin which gives H with probability 'p' and T with probability '(1-p)'.
something like this:
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]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
random.random() 返回 [0, 1) 范围内的均匀分布伪随机浮点数。 该数字小于 [0,1) 范围内给定数字
p
的概率为p
。 因此:一些实验:
random.random()
returns a uniformly distributed pseudo-random floating point number in the range [0, 1). This number is less than a given numberp
in the range [0,1) with probabilityp
. Thus:Some experiments:
您希望“偏差”基于对称分布吗? 或者也许是指数分布? 高斯有人吗?
好吧,这是从随机文档本身中提取的所有方法。
首先,一个三角分布的例子:
Do you want the "bias" to be based in symmetric distribuition? Or maybe exponential distribution? Gaussian anyone?
Well, here are all the methods, extracted from random documentation itself.
First, an example of triangular distribution:
怎么样:
How about:
这将返回一个布尔值,然后您可以使用它来选择所需的 H 或 T(或在任意两个值之间进行选择)。 您还可以在方法中包含选择:
但这种方式通常不太有用。
That returns a boolean which you can then use to choose H or T (or choose between any two values) you want. You could also include the choice in the method:
but it'd be less generally useful that way.
也可以使用
sympy
从X ~ Bernoulli(p)
分布nsamples
次进行采样:返回
'H'
或'T'
代替使用One can sample from the
X ~ Bernoulli(p)
distributionnsamples
times usingsympy
too:Return
'H'
or'T'
instead using导入 0 - 1 之间的随机数(可以使用 randrange 函数)
如果数字大于 (1-p) ,返回尾数。
否则,返回头部
Import a random number between 0 - 1 (you can use randrange function)
If the number is above (1-p), return tails.
Else, return heads
此时正面的概率是 75%,反面的概率是 25%(0,1,2 都是正面,只有 3 是反面)。 通过使用 random.randint() ,您可能会出现任何偏差,同时仍保持随机性。
Right now probability of Head is 75% and tails is 25% (0,1,2 are all Heads and only 3 is Tails) . By using random.randint() you could have any probability of bias while still maintaining randomness.