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对战士来说是最好的,失败了,然后把你带回一个神秘的错误。