Arn*_*uld 1 python probability
问题陈述:
编写一个程序,打印“我爱”后跟一个单词:附加单词应该是 'dogs' 的概率为 80%,'cats' 的概率为 10%,而 'bats' 的概率为 10%。这是一个示例输出:
I love bats
Run Code Online (Sandbox Code Playgroud)
例子
以下程序以 20% 的概率打印出单词 'dog'(Python 代码)
import random
prob = 0.20
if random.random() < prob:
print('dog')
Run Code Online (Sandbox Code Playgroud)
为什么它以 20% 的概率打印“狗”?这个想法是在 0.00 和 1.01 之间绘制一个随机值——这就是 random 模块中的函数 random() 所做的——并检查它是否小于以十进制数表示的所需概率值。例如,随机值落在 0.00 和 0.50 之间的概率为 50%。该值介于 0.50 和 1.0 之间的概率也是 50%。它落在 0.00 和 0.20 之间的概率是 20%,依此类推。AI 要素的原始练习:构建 AI,第 1 章
我不明白的是:
我只需要打印一个词:蝙蝠、猫或狗。当猫和蝙蝠的概率完全相同 10% 时,我如何打印一个。一,如果条件不能0.10和0.10之间的区别。
你可以想象一根长度为 1 的棍子。你把棍子分成 3 块(这样整个棍子都被使用了)。第一部分是棍子长度的 0.8,第二部分是 0.1,最后一部分是 0.1……现在你绘制一个随机变量,random.random()看看它落在棍子的哪个部分。所以这两个 .1 概率落在棒的不同部分:
r = random.random()
if r < .8:
print('dogs')
elif r < .9:
# here we have .1 = .9 - .8
print('cats')
else:
# this is the final part of the stick so we know we are in this bit if not in the others
print('bats')
Run Code Online (Sandbox Code Playgroud)
编辑(感谢@traal 这里不需要 numpy):为了完成这个答案,您还可以使用 random 以正确的概率从数组中采样:
choice = random.choices(["dogs", "cats", "bats"], [.8, .1, .1])
Run Code Online (Sandbox Code Playgroud)