【发布时间】:2017-05-23 01:59:00
【问题描述】:
我目前正在使用 Python 比较两个不同的数据集(xDAT 和 yDAT),这两个数据集由一定时间内的 240 个距离测量值组成。但是,数据集 xDAT 偏移了一个非线性量。这个非线性量等于时间相关的动态介质的宽度,我称之为 A 级。更具体地说,xDAT 测量从原点到 A 级的顶部,而 yDAT 测量从原点到 A 级的底部。见下图:
为了比较两条曲线,我必须首先对 xDAT 进行校正以弥补其偏移(A 级的宽度)。
到目前为止,我已经玩过不同程度的 numpy.polyfit。即:
coefs = np.polynomial.polynomial.polyfit(xDAT, yDAT, 5)
polyEST=[]
for i in range(0,len(x-DAT)):
polyEST.append(coefs[0] + coefs[1]*xDAT[i] + coefs[2]*pow(xDAT[i],2) + coefs[3]*pow(xDAT[i],3) + coefs[4]*pow(xDAT[i],4) + coefs[5]*pow(xDAT[i],5))
使用这种方法的问题是,当我绘制 polyEST(这是 xDAT 的更正版本)时,绘图仍然与 yDAT 的趋势不匹配并保持偏移。请看下图,其中xDAT=蓝色,修正xDAT=红色,yDAT=绿色:
理想情况下,校正后的 xDAT 仍应比 yDAT 噪声更大,但曲线的总体振荡和趋势应匹配。
非常感谢帮助我实施不同的曲线拟合和参数估计技术,以纠正由 A 级引起的非线性偏移。
谢谢。
【问题讨论】:
-
我不认为你想做什么很清楚。您调用
polyfit就好像xDAT和yDAT是一组样本点的x- 和y- 坐标,但是,您的问题描述和绘图表明它们不相关。 -
根据您的描述,偏移量是一个常数。使用度数 > 0 的多项式似乎是错误的方法。此外,从您的情节来看,xDat 和 yDat 似乎没有“排列”——即 xDat 显然不是 yDat +/- 某个常数——它似乎也被“翻转”或相移。
-
谢谢斯泰利奥斯。在介绍中,我提到 xDAT 和 yDAT 都是 240 个点的数据集。这些点中的每一个都对应于特定时间的测量……两个数据集都是以相等的时间增量测量的。我使用 polyfit 推导出描述两个数据集之间差异的多项式,然后我使用该多项式来校正在 xDAT 中看到的偏移量。我相信有一种更合适的方法来纠正在 xDAT 中观察到的 A 级偏移,而不是 np.polyfit。
-
是的,似乎有轻微的相移和翻转,但我不知道如何纠正。从简单的图表中可以看出,样品的位置略有不同。然而,每组中的样本是在相同的时间点采集的。在这种情况下,相移和翻转是由介质的深度和测试点水平位置的微小差异引起的。谢谢。
-
注意:校正后的 xDAT 图表(红色)显示了观察数 75-80 之间的高原,但我在原始 xDAT(蓝色)中没有看到此功能。
标签: python numpy estimation polynomials