Python 如何在不使用scipy.optimize拟合感兴趣的特征的情况下拟合函数?

Python 如何在不使用scipy.optimize拟合感兴趣的特征的情况下拟合函数?,python,scipy,curve-fitting,Python,Scipy,Curve Fitting,我正在使用scipy.optimize执行曲线拟合。我只想拟合光谱的第一部分和最后一部分。光谱的中间部分有所有有趣的特征,所以我显然不想适合那个区域。你怎么能这么做 例如: import matplotlib.pyplot as plt from scipy.optimize import curve_fit import numpy as np from numpy.polynomial.polynomial import polyfit %matplotlib inline import

我正在使用scipy.optimize执行曲线拟合。我只想拟合光谱的第一部分和最后一部分。光谱的中间部分有所有有趣的特征,所以我显然不想适合那个区域。你怎么能这么做

例如:

import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import numpy as np 
from numpy.polynomial.polynomial import polyfit

%matplotlib inline
import matplotlib.pyplot as pl

def func(x, a, b, c):
    return a * np.exp(-b * x) + c

xdata = np.linspace(0, 4, 50)
y = func(xdata, 2.5, 1.3, 0.5)
np.random.seed(1729)
y_noise = 0.2 * np.random.normal(size=xdata.size)
ydata = y + y_noise
plt.plot(xdata, ydata, 'b-', label='data')

感兴趣的特性介于2和2.5之间,因此我不想在该范围内进行曲线拟合。我只想在2.5之前和之后进行曲线拟合。如何使用scipy.optimize实现这一点?因为我遇到的问题是,它在整个光谱中都能实现拟合。任何帮助都将不胜感激

这个任务非常简单(假设我正确理解了这个问题,正如詹姆斯·菲利普斯在评论中指出的那样)。不过,有几种方法可以实现这一目标。这里有一个:

import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit

def decay( x, a, b, c ):
    return a + b * np.exp( - c * x )

xList = np.linspace( 0, 5, 121 )
yList = np.fromiter( ( .6 * np.exp( -( x - 2.25 )**2 / .05 ) + decay( x, .3, 1, .6) + .05 * np.random.normal() for x in xList ), np.float )

takeList = np.concatenate( np.argwhere( np.logical_or(xList < 2., xList > 2.5) ) )
featureList = np.concatenate( np.argwhere( np.logical_and(xList >= 2., xList <= 2.5) ) )

xSubList = xList[ takeList ]
ySubList = yList[ takeList ]
xFtList = xList[ featureList ]
yFtList = yList[ featureList ]

myFit, _ = curve_fit( decay,  xSubList, ySubList )

fitList = np.fromiter( ( decay( x, *myFit) for x in xList ), np.float )
cleanY = np.fromiter( ( y - decay( x, *myFit) for x,y in zip( xList, yList ) ), np.float )

fig = plt.figure()
ax = fig.add_subplot( 1, 1, 1 )
ax.plot( xList, yList )
ax.plot( xSubList, ySubList - .1, '--' ) ## -0.1 offset for visibility
ax.plot( xFtList, yFtList + .1, ':' ) ## +0.1 offset for visibility
ax.plot( xList, fitList, '-.' )
ax.plot( xList, cleanY ) ## feature without background
plt.show()
导入matplotlib.pyplot作为plt
将numpy作为np导入
从scipy.optimize导入曲线\u拟合
def衰减(x、a、b、c):
返回a+b*np.exp(-c*x)
xList=np.linspace(0,5121)
yList=np.fromiter((.6*np.exp(-(x-2.25)**2/.05)+衰变(x.3,1.6)+.05*np.random.normal(),用于xList中的x),np.float)
takeList=np.concatenate(np.argwhere(np.logical_或(xList<2,xList>2.5)))

featureList=np.concatenate(np.argwhere(np.logical_)和(xList>=2.,xList)您能否详细说明您的数据,以及您已经尝试过的内容,包括一个最小的工作示例?我猜您会删除您不想要的数据。我添加了一个示例。