如何修复Python3中类型转换对应的TypeError?
我正在运行以下代码。由于我是python新手,我试图理解为什么会出现TypeError以及如何修复它。非常感谢你的帮助如何修复Python3中类型转换对应的TypeError?,python,numpy,matplotlib,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 =
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')
回溯(最近一次调用last):文件“ElegantPDF.py”,第15行,在
y=(-1.000000)*a*math.log(x)TypeError:只有长度为1的数组才能转换为Python标量发生错误的原因是
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])
发生错误的原因是
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])
当x是数组时,math.log函数需要一个标量作为其输入参数 以下行应解决此问题:
y = [ math.log(x[i]) for i in range(0,len(x)) ]
它相当于
y=np.log(x)
math.log函数需要一个标量作为其输入参数,而x是一个数组
以下行应解决此问题:
y = [ math.log(x[i]) for i in range(0,len(x)) ]
它相当于
y=np.log(x)
可能:x
是一个数组,math.log(x)
需要一个数字。可能:x
是一个数组,math.log(x)
需要一个数字。我将对应的行更改为y=(-1.000000)*a*np.log(np.x)现在它给了我以下错误:回溯(最近一次调用上次):文件“ElegantPDF.py”,第16行,y=(-1.000000)*a*np.log(np.x)AttributeError:“module”对象没有属性“x”@Ashur-Nah,你应该只做np.log(x)
x
这是您的数组,它必须是函数的参数。我只是动态创建了我的数组,因此我做了np.array([3,4])
。这与执行data=[3,4]相同;x=ar(data)
基于代码的语法。下面的方法实际上是有效的:np.log(x),因为x已经被视为数组,而该行自动(令人惊讶地)将x记忆为数组。谢谢你给我一个线索。现在,我在绘图中有一个新的警告,它与绘图设置有关。如果我无法解决绘图设置的小问题,我将更新您。@Ashur奖励回合。pyplot.errorbar()中的xerr
后缺少等号。类似地,您可能还希望在那里添加一个
linestyle='''`参数,以消除错误条之间的任何链接行。直到误差条的大小大于0,你才会看到误差条。例如,试试xminus=[1]*N
和xplus=[2]*N
。最后,elinewidth
具有极高的价值。试着把它调小一点,或者完全去掉它。为了将来的参考,如果您有一个与原始问题无关的后续问题,最好是问一个新问题。我将相应的行更改为y=(-1.000000)*a*np.log(np.x),现在它给了我以下错误:回溯(最后一次调用):文件“ElegantPDF.py”,第16行,y=(-1.000000)*a*np.log(np.x)AttributeError:“module”对象没有属性“x”@Ashur-Nah,您应该只执行np.log(x)
x
这是您的数组,它必须是函数的参数。我只是动态创建了我的数组,因此我做了np.array([3,4])
。这与执行data=[3,4]相同;x=ar(data)
基于代码的语法。下面的方法实际上是有效的:np.log(x),因为x已经被视为数组,而该行自动(令人惊讶地)将x记忆为数组。谢谢你给我一个线索。现在,我在绘图中有一个新的警告,它与绘图设置有关。如果我无法解决绘图设置的小问题,我将更新您。@Ashur奖励回合。pyplot.errorbar()中的xerr
后缺少等号。类似地,您可能还希望在那里添加一个
linestyle='''`参数,以消除错误条之间的任何链接行。直到误差条的大小大于0,你才会看到误差条。例如,试试xminus=[1]*N
和xplus=[2]*N
。最后,elinewidth
具有极高的价值。试着把它调小一点,或者完全去掉它。为了便于将来参考,如果您有一个与原始问题无关的后续问题,最好是提出一个新问题。这可以简化为y=[math.log(i)For i in x]
。但是,这仅适用于1d阵列。对于多维数组,每个i
将不是标量,您将遇到相同的问题,而np.log()
将在不考虑形状的情况下应用操作元素。此外,np.log()
是矢量化的,操作比Python级循环快得多。这可以简化为y=[math.log(i)for i in x]
。但是,这仅适用于1d阵列。对于多维数组,每个i
将不是标量,您将遇到相同的问题,而np.log()
将在不考虑形状的情况下应用操作元素。此外,np.log()。