def linearize(p, x):
return p[0] * x**p[1]
def error(p, x, y):
return (np.log10(y) - np.log10(linearize(p, x)))
from scipy import optimize
args = freq_log[1:9063], np.abs(spec_log[1:9063])
qout, success = optimize.leastsq(error,
[1e5,-0.8],
args=args,
maxfev=3000)
fig,ax1=plt.subplots(figsize=(5,5))
spec = ax1.plot(freq_log,np.abs(spec_log), 'o', alpha=0.3)
approx = ax1.plot(freq_log[1:], linearize(qout, freq_log[1:]), linewidth=3)
我正在尝试复制代码,我试图理解线性化在这种情况下做了什么,它需要什么参数,以及为了弥补以下错误而返回的内容
目前它返回运行时错误和ValueError
RuntimeWarning: divide by zero encountered in power return p[0] * x**p[1]
RuntimeWarning: invalid value encountered in power return p[0] * x**p[1]
ValueError: object too deep for desired array
我主要关注的是前四行,是否有人可以帮助我了解导致此错误的原因以及如何解决此问题?
答案 0 :(得分:0)
详细的描述太长了,但值得了解。
我在网上发现了这个简短的例子。
留下链接,而不是在这里复制和粘贴。
http://www.scipy-lectures.org/intro/summary-exercises/optimize-fit.html
这里的线性化试图返回传递数据中的总噪声,然后用于评估您的误差,然后听到 leastsq ,最小化初始波形的平方和