1
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)

我正在尝试复制代码,并且试图了解在这种情况下 linearize 做了什么,它需要什么参数,以及 return 做了什么以纠正以下错误

目前它返回运行时错误和 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

我主要关心的是前四行,任何人都可以帮助我了解导致此错误的原因以及如何解决它?

完整代码是@https ://github.com/seg/tutorials-2017/blob/master/1710_Colored_inversion/Colored_inversion_notebook.ipynb

4

1 回答 1

0

详细的描述会太长,但值得了解。

我在网上找到了这个又好又短的例子。

留下一个链接,而不是在这里复制和粘贴。

http://www.scipy-lectures.org/intro/summary-exercises/optimize-fit.html

这里的线性化试图返回传递数据中的整体噪声,然后将其用于评估您的错误,然后听起来最小的平方,最小化初始波形的平方和。

于 2017-12-02T01:16:18.070 回答