基于给定的概率产生二元结果

时间:2017-02-09 18:07:40

标签: python random

我正在编写需要从给定概率或列表生成二进制结果的代码。我正在查看随机模块,但无法找到任何可以解决问题的方法。

实施例

返回1 30%的时间

实施例

返回1或0 45%和55%的时间

2 个答案:

答案 0 :(得分:1)

生成一个统一的(0,1)随机值,检查它是否≤所需的比例/ p值,并相应地返回0或1。假设rand是一个U(0,1)生成器,伪代码看起来像这样:

function bernoulli(p) {
  if rand <= p {
    return 1
  } else {
    return 0
  }
}

答案 1 :(得分:0)

random.choices肯定会做你想要的,但它可能有点矫枉过正。如果从有限集合中选择每个元素具有独立频率,则它可以生成任意长的序列。在链接的Python文档的示例部分中有一个示例:

cum_weights=(0.60, 1.00)

在该示例中,权重被指定为累积分布:

weights=(0.60, 0.40)

使用单个权重的等效调用(如您的示例所示)将为

startActivityForResult

权重不需要加起来Q;他们将被规范化。