【问题标题】:Generate Binary Outcome Based on Given ProbabilitY根据给定概率生成二元结果
【发布时间】:2017-06-27 21:18:03
【问题描述】:

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

例子

30% 的时间返回 1

示例

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

【问题讨论】:

  • 用什么语言?
  • Python 语言

标签: python random


【解决方案1】:

生成一个 uniform(0,1) 随机值,检查它是否 ≤ 所需的比例/p 值,并相应地返回 0 或 1。假设rand 是一个 U(0,1) 生成器,伪代码如下所示:

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

【讨论】:

    【解决方案2】:

    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)
    

    权重之和不需要为 1;它们将被标准化。

    【讨论】:

      猜你喜欢
      • 2021-08-27
      • 2012-01-10
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      • 1970-01-01
      • 1970-01-01
      • 2016-01-06
      相关资源
      最近更新 更多