在Python中,我有一个二维数据集,由两个列表
x1
和y1
组成。我还有另一组 x2
和 y2
定义如下:
x1 = [1,2,5,6,9,11]
y1 = [3,6,4,2,6,1]
temp = [0] + [x+2.273 for x in x1] + [12,14,17]
x2 = [x+(random.random()-0.5)/10 for x in temp]
temp = [1] + y1 + [5,3,6]
y2 = [x+(random.random()-0.5)/10 for x in temp]
真实世界数据
使用以下代码绘制这些数据
plt.clf()
plt.scatter(x1, y1, s=20, marker="o", c="b", label="original")
plt.scatter(x2, y2, s=5, marker="o", c="g", label="shifted")
plt.legend()
plt.show()
给出这样的情节:
给定两个任意数据集,x 数据的偏移未知,如何计算最佳“偏移”值以使两个数据集重叠最佳?
我尝试了一些与
np.correlate
但只返回基于索引的粗略值,但这里我有一个可以是任何数字的转变。
一个真实的单词示例如下所示
每个包含 5000 多个数据点。您可以看到某些点仅属于一个数据集。
使用以下内容:
import numpy as np
view = np.lib.stride_tricks.sliding_window_view
n = len(x1)
idx = ((view(y2, n) - np.array(y1))**2).sum(1).argmin()
np.polyfit(x1, x2[idx:n+idx], 1)
array([0.99860253, 2.28108306]) # close to [1, 2.273]