Monty Hall Python模拟

时间:2015-07-03 07:14:54

标签: python numpy statistics

所以我正在努力模拟python中的monty hall问题,我从Harvad Stats 111课程中获得了解决方案。下面的功能应该显示一个不是奖品门或猜门的门。但是,我对这两个函数的功能感到困惑。首先,bad.any()做了什么,为什么有必要。仅仅说“如果不坏”就不够了。其次,最后一行到底是什么。

非常感谢

def goat_door(prizedoors, guesses):

#strategy: generate random answers, and
#keep updating until they satisfy the rule
#that they aren't a prizedoor or a guess
result = np.random.randint(0, 3, prizedoors.size)
while True:
    bad = (result == prizedoors) | (result == guesses)
    if not bad.any(): #DON'T UNDERSTAND THIS
        return result
    result[bad] = np.random.randint(0, 3, bad.sum()) #DON'T UNDERSTAND THIS

1 个答案:

答案 0 :(得分:0)

当你在numpy.ndarray(numpy数组)上使用相等运算符时,它们会给出一个包含数组中每个元素相等的布尔值列表(就像返回数组中的第一个元素是第一个元素相等)两个阵列。

|是python中的按位或运算符,它用于按位或由两个相等比较返回的两个真值数组,因此如果{{1}它在ith索引处返回true在True索引处,它获取作为操作数的任何数组。

现在ith是一个布尔值数组,试图直接执行bad不起作用,因为它总是返回True,因为坏是一个数组(和任何非零/无值)在python中是真的(在python 2.x中))。

所以你必须做bad.any()检查if not bad数组中的任何元素是否为True,如果是,则返回bad,否则返回True

示例 -

False

如您所见,import numpy as np import numpy.random as rn n1 = np.arange(0,10) n2 = np.arange(5,15) rn.shuffle(n1) rn.shuffle(n2) print(n1) >>> [8 2 3 7 9 5 0 6 1 4] print(n2) >>> [ 8 5 14 12 13 7 10 11 6 9] d = n1 == n2 print(d) >>> [ True False False False False False False False False False] 是一个布尔值数组。

d

这是事实,因为print(d.any()) >>> True 中有一个真正的元素。