如何找到最佳可能的转变来关联 python/numpy 中的两个数据集?

问题描述 投票:0回答:1

在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]

真实世界数据

  • 可能有不同的长度
  • x 值(时间)可能不等距
  • 数据集中的一个点可能在其他数据集中没有对应的点
  • y 值可能不完全相同
  • 总体而言,数据可能具有一些非线性随机性(可忽略)

使用以下代码绘制这些数据

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 多个数据点。您可以看到某些点仅属于一个数据集。

python numpy correlation
1个回答
1
投票

使用以下内容:

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]
© www.soinside.com 2019 - 2024. All rights reserved.