【发布时间】:2016-02-10 22:41:48
【问题描述】:
这是我的代码:
import random
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
nsim = 1000 # aantal simulaties
n = 5 # Aantal deuren
def simulate_prizedoor(nsim, n):
return np.random.randint(n, size=nsim)
prizedoors = simulate_prizedoor(nsim, n)
print "simulate_prizedoor(nsim = 1000, n = 30)=", prizedoors[:15]
def simulate_guess(nsim, n):
return np.random.randint(n, size=nsim)
guesses = simulate_guess(nsim, n)
print "simulate_guess(nsim = 1000, n = 30)=", guesses[:15]
def simulate_switch(prizedoor, guess, n):
switched_list = []
for sim in range(prizedoor.shape[0]):
while True:
randomInt = np.random.randint(n)
if randomInt != prizedoor[sim] and randomInt != guess[sim]:
switched_list.append(randomInt)
break
return np.array(switched_list)
print "simulate_switch(simulate_prizedoor(nsim = 10, n), simulate_guess(10, n), n) =", simulate_switch(simulate_prizedoor(10, n), simulate_guess(10, n), n)
def win_percentage(guesses, prizedoors):
win = float(0)
for sim in range(len(guesses)):
if guesses[sim] == prizedoors[sim]:
win += 1
win_perc = (win / len(guesses)) * 100
return win_perc
print "win_percentage(simulate_guess(nsim, n), simulate_prizedoor(nsim,n))=", win_percentage(simulate_guess(nsim, n), simulate_prizedoor(nsim,n))
print "win_percentage(simulate_switch(simulate_prizedoor(nsim, n), simulate_guess(nsim, n), n), simulate_prizedoor(nsim,n))=", win_percentage(simulate_switch(simulate_prizedoor(nsim, n), simulate_guess(nsim, n), n), simulate_prizedoor(nsim,n))
print "*** PLOT Intepr 1 ***"
x = np.linspace(0, 20)
y = win_percentage(simulate_switch(simulate_prizedoor(nsim, x), simulate_guess(nsim, x), x), simulate_prizedoor(nsim,x))
plt.plot(x, y)
plt.xlabel("X axis")
plt.ylabel("Y axis")
这是输出和错误:
simulate_prizedoor(nsim = 1000, n = 30)= [2 1 0 4 3 2 2 2 0 3 1 0 4 1 0]
simulate_guess(nsim = 1000, n = 30)= [2 0 1 3 1 3 1 4 3 2 0 0 3 4 2]
simulate_switch(simulate_prizedoor(nsim = 10, n), simulate_guess(10, n), n) = [2 3 0 3 4 2 1 3 1 1]
win_percentage(simulate_guess(nsim, n), simulate_prizedoor(nsim,n))= 18.9
win_percentage(simulate_switch(simulate_prizedoor(nsim, n), simulate_guess(nsim, n), n), simulate_prizedoor(nsim,n))= 21.4
*** PLOT Intepr 1 ***
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-1-55303947fa57> in <module>()
53
54 x = np.linspace(0, 20)
---> 55 y = win_percentage(simulate_switch(simulate_prizedoor(nsim, x), simulate_guess(nsim, x), x), simulate_prizedoor(nsim,x))
56
57 plt.plot(x, y)
<ipython-input-1-55303947fa57> in simulate_prizedoor(nsim, n)
10
11 def simulate_prizedoor(nsim, n):
---> 12 return np.random.randint(n, size=nsim)
13
14 prizedoors = simulate_prizedoor(nsim, n)
mtrand.pyx in mtrand.RandomState.randint (numpy/random/mtrand/mtrand.c:9533)()
TypeError: only length-1 arrays can be converted to Python scalars
我试图找到一个解决方案,并重写了大部分代码。首先我认为这是因为我没有使用 NP random.randint 来确定一个随机整数。我实现了,但问题仍然是一样的。这里的任何人都对这里到底出了什么问题有所了解?
我正在尝试在 matplotlib 中绘制图形。在 y 轴上是获胜百分比,在水平轴上:n。
已收到反馈!
【问题讨论】:
-
有没有什么方法可以在代码中没有多余细节的情况下提出问题?
标签: python numpy matplotlib ipython