use*_*404 73 python arrays scalar logging
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()
Run Code Online (Sandbox Code Playgroud)
我只是不确定如何解决我的问题.它一直在说:
m=math.log10(abs(x))
TypeError: only length-1 arrays can be converted to Python scalars
Run Code Online (Sandbox Code Playgroud)
Tom*_*ohl 95
非numpy函数喜欢math.abs()或math.log10()不能很好地使用numpy数组.只需用以下代码替换引发错误的行:
m = np.log10(np.abs(x))
Run Code Online (Sandbox Code Playgroud)
除此之外,np.polyfit()调用将无法正常工作,因为它缺少一个参数(并且您无需分配结果以供进一步使用).
Eri*_*ski 62
这是使用numpy在Python2.7中重现此错误的另一种方法:
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)
Run Code Online (Sandbox Code Playgroud)
该np.concatenate方法产生错误:
TypeError: only length-1 arrays can be converted to Python scalars
Run Code Online (Sandbox Code Playgroud)
如果您阅读numpy.concatenate周围的文档,那么您会看到它需要一个numpy数组对象的元组.所以用parens围绕变量修复它:
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)
Run Code Online (Sandbox Code Playgroud)
然后打印:
[1 2 3 4 5 6]
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
这个错误是泡沫实现的一个例子 - 它是由python的duck-typing哲学引起的.这是一个神秘的低级别错误python guts,当它收到一些意想不到的变量类型,试图逃跑并做某事,获得部分通过,呕吐,尝试补救行动,失败,然后告诉你"你可以"当风从东方吹来时,重新制定子空间响应者".
在更合理的语言中,比如C++或Java,它会告诉你:"你不能使用预期TypeB的TypeA".但是Python最好是继续战斗,做一些未定义的事情,失败,然后把你带回一个无益的错误.我们必须讨论这个事实是我不喜欢Python或其鸭子类型哲学的原因之一.