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()
我只是不知道如何解决我的问题。它一直在说:
m=math.log10(abs(x))
TypeError: only length-1 arrays can be converted to Python scalars
下面是在Python2.7中用numpy再现此错误的另一种方法:
np.concatenate
方法产生错误:如果您阅读了关于numpy.concatenate的文档,就会发现它需要一个numpy数组对象元组。因此,用parens将变量包围起来,就解决了这个问题:
然后它会打印:
这里怎么了?
这个错误是冒泡实现的一个例子——它是由python的duck类型哲学引起的。这是一个神秘的低级错误python guts puke up,当它接收到一些意外的变量类型,试图跑掉并做一些事情,得到一部分通过,pukes,尝试补救行动,失败,然后告诉你“当周二的风从东方吹来时,你无法重新构造子空间响应器”。
在更为敏感的语言如C++或java中,它会告诉你:“你不能使用TypeB所期望的类型。”但Python做的最好是坚持下去,做一些未定义的事情,失败了,然后把一个无用的错误交给你。我们必须讨论这一点,这是我不喜欢Python或它的duck类型哲学的原因之一。像
math.abs()
或math.log10()
这样的非numpy函数不能很好地处理numpy数组。只需将引发错误的行替换为:除此之外,
np.polyfit()
调用将不起作用,因为它缺少一个参数(而且您也不会分配结果以供进一步使用)。相关问题 更多 >
编程相关推荐