【问题标题】:TypeError: only length-1 arrays can be converted to Python scalars when trying to plot in NotebookTypeError:尝试在 Notebook 中绘图时,只能将长度为 1 的数组转换为 Python 标量
【发布时间】: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


【解决方案1】:

问题是您试图将数组“x = np.linspace(0,20)”传递给函数 np.random.randint(x, size)。您需要将单个整数值传递给此函数。

【讨论】:

    猜你喜欢
    • 2021-11-29
    • 2014-03-08
    • 2016-08-09
    • 2014-09-27
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多