我有一个数据集,我想平滑。我有两个变量y和x,它们的间距不均匀。y是依变量。但是,我不知道x和y的关系式是什么
我读过所有关于插值的书,但是插值要求我知道x和y之间的关系式,我也看了其他的平滑函数,但是这些都会导致起点和终点的问题。
有人知道如何: -得到一个关于x和y的公式 -平滑数据点而不弄乱端点
我的数据如下:
import matplotlib.pyplot as plt
x = [0.0, 2.4343476531707129, 3.606959459205791, 3.9619355597454664, 4.3503348239356558, 4.6651002761894667, 4.9360228447915109, 5.1839565805565826, 5.5418099660513596, 5.7321342976055165,5.9841050994671106, 6.0478709402949216, 6.3525180590674513, 6.5181245134579893, 6.6627517592933767, 6.9217136972938444,7.103121623408132, 7.2477706136047413, 7.4502723880766748, 7.6174503055171137, 7.7451599936721376, 7.9813193157205191, 8.115292520850506,8.3312689109403202, 8.5648187916197998, 8.6728478860287623, 8.9629327234023926, 8.9974662723308612, 9.1532523634107257, 9.369326186780814, 9.5143785756455479, 9.5732694726297893, 9.8274813411538613, 10.088572892445802, 10.097305715988142, 10.229215999264703, 10.408589988296546, 10.525354763219688, 10.574678982757082, 10.885039893236041, 11.076574204171795, 11.091570626351352, 11.223859812944436, 11.391634940142225, 11.747328449715521, 11.799186895037078, 11.947711314893802, 12.240901223703657, 12.50151825769724, 12.811712563174883, 13.153496854155087, 13.978408296586579, 17.0, 25.0]
y = [0.0, 4.0, 6.0, 18.0, 30.0, 42.0, 54.0, 66.0, 78.0, 90.0, 102.0, 114.0, 126.0, 138.0, 150.0, 162.0, 174.0, 186.0, 198.0, 210.0, 222.0, 234.0, 246.0, 258.0, 270.0, 282.0, 294.0, 306.0, 318.0, 330.0, 342.0, 354.0, 366.0, 378.0, 390.0, 402.0, 414.0, 426.0, 438.0, 450.0, 462.0, 474.0, 486.0, 498.0, 510.0, 522.0, 534.0, 546.0, 558.0, 570.0, 582.0, 594.0, 600.0, 600.0]
#Smoothing here
fig, ax = plt.subplots(figsize=(8, 6))
ax.plot(x, y, color='red', label= 'Unsmoothed curve')
我认为平滑(即滤波)、插值和曲线拟合之间存在混淆
过滤/平滑:我们在数据上应用一个运算符来修改原始的
y
点,以消除高频振荡。这可以通过例如基于scipy.signal.convolve
、scipy.signal.medfilt
、scipy.signal.savgol_filter
或FFT的方法来实现。插值:我们从可用的数据点创建数据的连续局部表示。插值定义函数在数据点之间的行为方式,但不修改数据点本身。请参见例如
scipy.interpolate.interp1d
。不过,为了使事情更复杂,实际上也做了一些平滑处理。曲线拟合:我们通过一些分析函数来拟合数据点。这允许在我们的数据中确定
x
和y
之间的全局关系,但需要对适当的拟合函数有一些先前的了解。见scipy.optimize.curve_fit
在这种特殊情况下,我们可以使用的方法是首先在均匀网格上插值(如{a2}的答案),然后应用Savitzky-Golay滤波器平滑数据。或者,可以将数据拟合到一些分析表达式,例如基于tanh函数,但这需要进一步调整:
插值不需要知道x和y的公式
相关问题 更多 >
编程相关推荐