TypeError:在尝试指数拟合数据时,只能将长度为1的数组转换为Python标量

TypeError:在尝试指数拟合数据时,只能将长度为1的数组转换为Python标量,python,arrays,logging,scalar,Python,Arrays,Logging,Scalar,我只是不确定如何解决我的问题。它一直在说: 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 = f-g[:,:11944] t=range(len(x)) m=math.log10(abs(x)) np.polyfit(t,m) plt.plot(t,abs(x)) plt.sho

我只是不确定如何解决我的问题。它一直在说:

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 = f-g[:,:11944]
t=range(len(x))
m=math.log10(abs(x))

np.polyfit(t,m)

plt.plot(t,abs(x))
plt.show()

非numpy函数,如
math.abs()
math.log10()
不能很好地处理numpy数组。只需将引发错误的行替换为:

m=math.log10(abs(x))
TypeError: only length-1 arrays can be converted to Python scalars

除此之外,
np.polyfit()
调用将不起作用,因为它缺少一个参数(并且您不会分配结果以供进一步使用)。

这里有另一种方法可以在Python2.7中使用numpy重现此错误:

m = np.log10(np.abs(x))
np.concatenate
方法产生错误:

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) 
如果您仔细阅读文档,就会发现它需要一个numpy数组对象的元组。因此,用帕伦斯将变量包围起来解决了这个问题:

TypeError: only length-1 arrays can be converted to Python scalars
然后打印:

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) 
这里发生了什么事?

这个错误是冒泡实现的一个例子——它是由python的duck类型哲学引起的。这是一个隐晦的低级错误,python guts在接收到一些意外的变量类型,试图逃跑并做一些事情,中途通过,呕吐,尝试补救措施,失败,然后告诉您“当周二东风吹来时,您无法重新构造子空间响应器”


在更为敏感的语言如C++或java中,它会告诉你:“你不能使用TypeB所期望的类型。”但是Python做的最好是坚持下去,做一些未定义的事情,失败,然后返回一个没有帮助的错误。我们必须讨论这一点,这是我不喜欢Python或其duck类型哲学的原因之一。

回答得很好。除此之外,我认为没有一个数学函数可以处理numpy数组。最好用numpy函数来更改它们。非常感谢!我在math.power与其他numpy函数的组合中遇到了类似的问题。将math.power替换为numpy.power解决了问题。python 3中仍然存在此问题,并神秘地杀死了我。请尝试使用pdb调试器向您提供有关错误的更多信息:哦,很抱歉,我的帖子不清楚。我的意思是,我有相同的问题与连接,你的回答解决了它为我。你提到这是Python2.7和numpy的一个错误(功能?),python3和numpy仍然存在:)“当周二东风吹来时,你无法重新计算子空间响应器”我喜欢youLook兄弟,我不会为损坏的碎片整理器付你70分。当您将一个像[1,2,3]这样的本机python列表提供给一个需要numpy数组的numpy方法时,您将得到这个错误。这个numpy方法获取您的本地python列表,并尝试对其进行消化,然后在其深处将此响应吐出。一个更加用户友好的错误消息是:
TypeError:不要将本机python列表馈送到需要numpy数组的numpy函数中。要么将python列表转换为numpy数组,要么将python列表打包为元组。
python numpy在这方面做得太差了,错误消息太可怕了。
[1 2 3 4 5 6]