TypeError:在尝试按指数拟合数据时,只能将长度为1的数组转换为Python标量
f=np.loadtxt('Single Small Angle 1.txt',unpack=True,skiprows=2) g=np.loadtxt('Single Small Angle 5.txt',unpack=True,skiprows=2) x = fg[:,:11944] t=range(len(x)) m=math.log10(abs(x)) np.polyfit(t,m) plt.plot(t,abs(x)) plt.show()
我只是不确定如何解决我的问题。 它一直在说:
m=math.log10(abs(x)) TypeError: only length-1 arrays can be converted to Python scalars
非math.abs()
函数(如math.abs()
或math.log10()
与numpy数组不能很好地配合使用。 只需将引起错误的行replace为:
m = np.log10(np.abs(x))
除此之外, np.polyfit()
调用将无法正常工作,因为它缺less一个参数(而且您不会将结果分配给进一步使用)。
这里是另一种方式来重现在Python2.7与numpy这个错误:
import numpy as np a = np.array([1,2,3]) b = np.array([4,5,6]) c = np.concatenate(a,b) #note the lack of tuple format for a and b print(c)
np.concatenate
方法产生一个错误:
TypeError: only length-1 arrays can be converted to Python scalars
如果你阅读numpy.concatenate的文档,你会发现它期望一个numpy数组对象的元组。 所以用parens围绕这个variables修正了它:
import numpy as np a = np.array([1,2,3]) b = np.array([4,5,6]) c = np.concatenate((a,b)) #surround a and b with parens, packaging them as a tuple print(c)
然后它打印:
[1 2 3 4 5 6]
这里发生了什么?
这个错误是一个泡沫实现的例子 – 它是python guts在接收到一些意外的variablestypes时产生的那些神秘的低级错误之一,它不太确定该怎么做,所以它跑了,试图奇怪的东西,失败,并告诉你,你不能repromulate子空间响应者。
在更加合理的语言,如C ++或Java,它会告诉你:“你不能使用TypeA的预期TypeA”。 但是python对战士来说是最好的,失败了,然后把你带回一个神秘的错误。