根据概率打印单词

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之间的区别。

nic*_*ick 6

你可以想象一根长度为 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)

  • 无需为此使用 NumPy;它在标准库中!random.choices((“狗”, “猫”, “蝙蝠”), (80, 10, 10)) https://docs.python.org/3/library/random.html#random.choices (3认同)