所以我正在努力模拟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
答案 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
中有一个真正的元素。