【问题标题】:True or false output based on a probability基于概率的真假输出
【发布时间】:2011-08-18 17:20:42
【问题描述】:

是否有 Python 的标准函数可以根据输入的 0 到 1 的随机数概率地输出 True 或 False?

我的意思的例子:

def decision(probability):
    ...code goes here...
    return ...True or False...

如果给定输入,例如 0.7,上述示例将以 70% 的概率返回 True,以 30% 的概率返回 false

【问题讨论】:

    标签: python scientific-computing


    【解决方案1】:

    只需使用PyProbs 库。它非常易于使用。

    >>> from PyProbs import Probability as pr
    >>> 
    >>> # You can pass float (i.e. 0.5, 0.157), int (i.e. 1, 0) or str (i.e. '50%', '3/11')
    >>> pr.Prob(50/100)
    False
    >>> pr.Prob(50/100, num=5)
    [False, False, False, True, False]
    

    【讨论】:

      【解决方案2】:

      我用它在 python 中生成一个随机布尔值:

      from random import randint
      n=8 # inverse of probability
      rand_bool=randint(0,n*n-1)%n==0
      

      所以扩展它:

      def rand_bool(prob):
          s=str(prob)
          p=s.index('.')
          d=10**(len(s)-p)
          return randint(0,d*d-1)%d<int(s[p+1:])
      

      我自己想出了这个,但它似乎有效。

      【讨论】:

        【解决方案3】:

        如果你想收集大量数据,我建议使用地图:

            from numpy import random as rn
            p = 0.15
            data = rn.random(100)
            final_data = list(map(lambda x: x < p, data))
        

        【讨论】:

        • 这增加了什么8年的答案都没有?
        【解决方案4】:

        给定一个函数 rand 返回一个介于 0 和 1 之间的数字,您可以像这样定义 decision:

        bool decision(float probability)
        {
           return rand()<probability;
        }
        

        假设 rand() 返回的值在 [0.0, 1.0) 范围内(所以可以输出 0.0,永远不会输出 1.0)。

        【讨论】:

        • 这个问题被标记为python,所以你的代码示例似乎有点不合适。
        • @Blindy +1 感谢您提供伪代码;)我来自 Java 背景,很高兴找到您的 sn-p - 即使问题被标记为 Python。
        • @Zainodis,嘿,是的,我发现如果从非常高的级别使用,类 C 语言几乎是一种通用语言!
        【解决方案5】:
        import random
        
        def decision(probability):
            return random.random() < probability
        

        【讨论】:

        • 请注意,random.random() 在 [0, 1) 中统一生成数字。 0 包含 1 不包含
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-21
        • 2021-10-10
        • 1970-01-01
        • 2021-12-21
        • 1970-01-01
        • 2013-12-24
        相关资源
        最近更新 更多