如何从多项式拟合中排除值?
How to exclude values from a polynomial fit?
我对我的数据拟合了一个多项式,如图:
使用脚本:
from scipy.optimize import curve_fit
import scipy.stats
from scipy import asarray as ar,exp
xdata = xvalues
ydata = yvalues
fittedParameters = numpy.polyfit(xdata, ydata + .00001005 , 3)
modelPredictions = numpy.polyval(fittedParameters, xdata)
axes.plot(xdata, ydata, '-')
xModel = numpy.linspace(min(xdata), max(xdata))
yModel = numpy.polyval(fittedParameters, xModel)
axes.plot(xModel, yModel)
我想排除 3.4 到 3.55 um 的区域。我怎样才能在我的脚本中做到这一点?我也有 NaN,我试图在原始 .fits 文件中删除它们。帮助将受到重视。
您可以屏蔽排除区域内的值,稍后将此屏蔽应用于您的拟合函数
# Using random data here, since you haven't provided sample data
xdata = numpy.arange(3,4,0.01)
ydata = 2* numpy.random.rand(len(xdata)) + xdata
# Create mask (boolean array) of values outside of your exclusion region
mask = (xdata < 3.4) | (xdata > 3.55)
# Do the fit on all data (for comparison)
fittedParameters = numpy.polyfit(xdata, ydata + .00001005 , 3)
modelPredictions = numpy.polyval(fittedParameters, xdata)
xModel = numpy.linspace(min(xdata), max(xdata))
yModel = numpy.polyval(fittedParameters, xModel)
# Do the fit on the masked data (i.e. only that data, where mask == True)
fittedParameters1 = numpy.polyfit(xdata[mask], ydata[mask] + .00001005 , 3)
modelPredictions1 = numpy.polyval(fittedParameters1, xdata[mask])
xModel1 = numpy.linspace(min(xdata[mask]), max(xdata[mask]))
yModel1 = numpy.polyval(fittedParameters1, xModel1)
# Plot stuff
axes.plot(xdata, ydata, '-')
axes.plot(xModel, yModel) # orange
axes.plot(xModel1, yModel1) # green
给出
绿色曲线现在是排除了 3.4 < xdata 3.55
的拟合。橙色曲线为未排除的装修(对比)
如果您想在 xdata
中排除可能的 nans,您可以通过 numpy.isnan()
函数增强 mask
,例如
# Create mask (boolean array) of values outside of your exclusion AND which ar not nan
xdata < 3.4) | (xdata > 3.55) & ~numpy.isnan(xdata)
我对我的数据拟合了一个多项式,如图:
使用脚本:
from scipy.optimize import curve_fit
import scipy.stats
from scipy import asarray as ar,exp
xdata = xvalues
ydata = yvalues
fittedParameters = numpy.polyfit(xdata, ydata + .00001005 , 3)
modelPredictions = numpy.polyval(fittedParameters, xdata)
axes.plot(xdata, ydata, '-')
xModel = numpy.linspace(min(xdata), max(xdata))
yModel = numpy.polyval(fittedParameters, xModel)
axes.plot(xModel, yModel)
我想排除 3.4 到 3.55 um 的区域。我怎样才能在我的脚本中做到这一点?我也有 NaN,我试图在原始 .fits 文件中删除它们。帮助将受到重视。
您可以屏蔽排除区域内的值,稍后将此屏蔽应用于您的拟合函数
# Using random data here, since you haven't provided sample data
xdata = numpy.arange(3,4,0.01)
ydata = 2* numpy.random.rand(len(xdata)) + xdata
# Create mask (boolean array) of values outside of your exclusion region
mask = (xdata < 3.4) | (xdata > 3.55)
# Do the fit on all data (for comparison)
fittedParameters = numpy.polyfit(xdata, ydata + .00001005 , 3)
modelPredictions = numpy.polyval(fittedParameters, xdata)
xModel = numpy.linspace(min(xdata), max(xdata))
yModel = numpy.polyval(fittedParameters, xModel)
# Do the fit on the masked data (i.e. only that data, where mask == True)
fittedParameters1 = numpy.polyfit(xdata[mask], ydata[mask] + .00001005 , 3)
modelPredictions1 = numpy.polyval(fittedParameters1, xdata[mask])
xModel1 = numpy.linspace(min(xdata[mask]), max(xdata[mask]))
yModel1 = numpy.polyval(fittedParameters1, xModel1)
# Plot stuff
axes.plot(xdata, ydata, '-')
axes.plot(xModel, yModel) # orange
axes.plot(xModel1, yModel1) # green
给出
绿色曲线现在是排除了 3.4 < xdata 3.55
的拟合。橙色曲线为未排除的装修(对比)
如果您想在 xdata
中排除可能的 nans,您可以通过 numpy.isnan()
函数增强 mask
,例如
# Create mask (boolean array) of values outside of your exclusion AND which ar not nan
xdata < 3.4) | (xdata > 3.55) & ~numpy.isnan(xdata)