如何修复与Python3中类型之间的转换相对应的TypeError?

时间:2016-01-26 00:25:56

标签: python numpy matplotlib

我正在运行以下代码。由于我是python的新手,我试图理解为什么我得到TypeError以及如何解决它。非常感谢您的帮助。

import matplotlib
matplotlib.use('SVG')

import matplotlib.pyplot as pyplot
import random
from numpy import array as ar
import math


N = 1000
data = [random.random() for i in range(N)]
x = ar(data)

a = 1.000000
y = (-1.000000) * a * math.log(x)

'''
pyplot.axis([0, 1, 0, 1])
'''

pyplot.xticks([0.1*k for k in range(0,1)])

'''
pyplot.yticks([0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0])
'''

pyplot.title('ElegantPDF')
pyplot.xlabel('x')
pyplot.ylabel('PDF(x)')

xminus = [0] * N 
xplus = [0] * N
yminus = [0] * N
yplus = [0] * N


pyplot.plot(x,y, color='blue', linestyle='', marker='o', label='Probability Distribuiton Function')
pyplot.errorbar(x, y, xerr=(xminus, xplus), yerr=(yminus, yplus), ecolor='green', elinewidth=2.0, capsize=20.0)
pyplot.legend(title='The legend')
pyplot.savefig('Elegant.svg')

回溯(最近一次呼叫最后):文件" ElegantPDF.py",第15行,     y =(-1.000000)* a * math.log(x)TypeError:只能将length-1数组转换为Python标量

2 个答案:

答案 0 :(得分:2)

发生错误是因为math.log()需要标量或标量数组。

import math
import numpy as np

math.log(np.array([3, 4])) # will fail
math.log(np.array([3]))    # same as math.log(3)

如果要计算所有元素的日志,请改用np.log()

np.log(np.array([3, 4]))   # will get array([ 1.09861229,  1.38629436])

答案 1 :(得分:1)

math.log函数期望标量作为其输入参数,而x是数组。

以下行应该解决问题:

y = [ math.log(x[i]) for i in range(0,len(x)) ]

相当于y = np.log(x)