<p>我在源代码中添加了一些注释,这些注释解释了我对代码的理解。它看起来确实很像蒙蒂霍尔实验,所以我猜这个函数基本上是这样的:</p>
<blockquote>
<p>Given that you guessed <code>guesses[i]</code> and there is a goat behind <code>goatdoors[i]</code>, you should switch and pick door <code>results[i]</code>.</p>
</blockquote>
<p>如果我理解正确的话,解决这个问题似乎也有点复杂。你知道吗</p>
<pre><code>def switch_guess(guesses, goatdoors):
# Initialise result to an array of zeros, the same size as the guesses array
result = np.zeros(guesses.size)
# Create a dictionary to be used later in determining the values of result.
switch = {(0, 1): 2, (0, 2): 1, (1, 0): 2, (1, 2): 1, (2, 0): 1, (2, 1): 0}
for i in [0, 1, 2]:
for j in [0, 1, 2]:
# Create a mask, which is True when the corresponding elements of
# guesses and goatdoors are both equal to i and j, respectively.
mask = (guesses == i) & (goatdoors == j)
# If no elements of mask are true, go to the next loop iteration (of
# the j loop).
if not mask.any():
continue
# For each element of result, if the corresponding element of mask
# is True, set the element of result to 1 * switch[(i, j)], otherwise
# leave it unchanged.
result = np.where(mask, np.ones_like(result) * switch[(i, j)], result)
return result
</code></pre>