簡體   English   中英

如何從多項式擬合中排除值?

[英]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 中排除該區域。 我怎么能在我的腳本中做到這一點? 此外,我試圖在原始 .fits 文件中刪除 NaN。 幫助將受到重視。

您可以屏蔽排除區域內的值,然后將此屏蔽應用於擬合函數

# 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也排除可能的numpy.isnan()你可以通過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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM