[英]scipy curve_fit fails on easy linear fit?
我打算对每个长度为54的两个numpy数组y1
和y2
进行简单的线性拟合。 该函数定义如下:
def f(x,b):
return b*x
数据绘制在这里:
然后我尝试通过以下方式拟合:
popt, pcov = scop.curve_fit(f,y2,y1) # yes y1 and y2 are in right order
结果: popt = 1., pcov = inf
我尝试使用p0 = -833
,或多或少应该是结果,但是它给我popt = -833, pcov = inf
。
我使用示例函数尝试了一些示例数据:
x = np.array(range(10))
y = x**2 + 3
def fu(x,b):
return x**2 + b
po, pc = scop.curve_fit(fu,x,y)
print po, pc
结果很好:3和2e-33
有人对第一次审判出了什么问题有想法吗? 我还没有发现任何有用的东西或与我的问题有关的信息...
NaN值将产生毫无意义的结果-您需要在进行任何拟合之前将其从数据中排除。 您可以使用布尔索引来执行此操作:
valid = ~(np.isnan(y1) | np.isnan(y2))
popt, pcov = scop.curve_fit(f, y2[valid], y1[valid])
如评论中所述, 在低于 curve_fit
的scipy版本中,curve_fit将自动检查输入数组中的NaN和Infs,如果找到,则会引发ValueError
。 可以选择使用check_finite
参数禁用此行为。
根据您的问题和评论,我假设您必须使用旧版本-您可能应该考虑升级。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.