我正在编写需要从给定概率或列表生成二元结果的代码。我正在查看random模块,但找不到任何可以解决问题的东西。
示例
回报130%的概率
示例
返回1或0 45%和55%的时间
发布于 2017-02-10 04:07:55
生成一个均匀的(0,1)随机值,检查它是否≤了所需的比例/p值,并相应地返回0或1。假设rand是一个U(0,1)生成器,伪代码将如下所示:
function bernoulli(p) {
if rand <= p {
return 1
} else {
return 0
}
}发布于 2017-02-11 11:44:03
random.choices肯定会做你想做的事情,但这可能有点过分了。如果从每个元素具有独立频率的有限集合中进行选择,则它可以生成任意长的序列。在链接的Python文档的示例部分中有一个它的用法示例:
>>> # Estimate the probability of getting 5 or more heads from 7 spins
>>> # of a biased coin that settles on heads 60% of the time.
>>> trial = lambda: choices('HT', cum_weights=(0.60, 1.00), k=7).count('H') >= 5
>>> sum(trial() for i in range(10000)) / 10000
0.4169在该示例中,权重被指定为累积分布:
cum_weights=(0.60, 1.00)使用单个权重的等效调用,如您的示例所示,如下所示
weights=(0.60, 0.40)权重不需要加起来等于Q;它们将被标准化。
https://stackoverflow.com/questions/42143897
复制相似问题