繁体   English   中英

Python:scipy.optimze中的Curve_fit无法设置x值的范围

[英]Python: Curve_fit from scipy.optimze has no possibility for range of x values

我找不到告诉Curve_fit仅使用特定范围内的x值的可能性。 我找到了“ bounds”参数,但这似乎只适用于我函数的参数。

当有数据时,例如,要拟合的地方是线性曲线(但仅在数据的特定区域),则必须创建一个新列表。 特别是因为pyplot.plot为x和y值获取两个单独的列表,而对于手动排序,您需要将它们作为(x,y)对。

实际上,最简单的解决方案是创建一个新列表,该列表是原始列表的过滤后的版本。 当然,最好是使用numpy数组而不是python列表。

因此,假设有两个数组xy ,您只想将x大于某个数字a那些值拟合到函数f 您可以对其进行过滤和curve_fit

x2 = x[x>a]
y2 = y[x>a]
popt2, _ = scipy.optimize.curve_fit(f, x2, y2 )

一个完整的例子:

import numpy as np; np.random.seed(0)
import matplotlib.pyplot as plt
import scipy.optimize

x = np.linspace(-1,3)
y = x**2 + np.random.normal(size=len(x))
f = lambda x, a,b : a* x +b

popt, _ = scipy.optimize.curve_fit(f, x,y, p0=(1,0))

x2 = x[x>0.7]
y2 = y[x>0.7]
popt2, _ = scipy.optimize.curve_fit(f, x2,y2, p0=(1,0))

plt.plot(x,y, marker="o", ls="", ms=4, label="all data")
plt.plot(x, f(x, *popt), color="moccasin", label="fit all data")
plt.plot(x2, f(x2, *popt2),  label="fit filtered data")

plt.legend()
plt.show()

在此处输入图片说明

最后要提一下,您还可以使用逻辑运算符连接多个条件,例如x[(x>0.7) & (x<2.5)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM