我有两个2d数组,obs1
和obs2
。它们代表两个独立的测量系列,并且都具有dim0 = 2,并且dim1略有不同,例如obs1.shape = (2, 250000)
和obs2.shape = (2, 250050)
。 obs1[0]
和obs2[0]
表示时间,而obs1[1]
和obs2[1]
表示某些空间坐标。两个数组都(或多或少)按时间排序。两个测量系列之间的时间和坐标应该相同,但实际上并非如此。同样,并非来自obs1
的每个测量都在obs2
中具有对应的值,反之亦然。另一个问题是时间可能会稍有偏移。
我正在寻找一种有效的算法,以将obs2
中的最佳匹配值与obs1
中的每个度量相关联。目前,我这样做是这样的:
define dt = some_maximum_time_difference
define dx = 3
j = 0
i = 0
matchresults = np.empty(obs1.shape[1])
for j in obs1.shape[1]:
while obs1[0, j] - obs2[0, j] < dt:
i += 1
matchresults[j] = i - dx + argmin(abs(obs1[1, i] - obs2[1, i-dx:i+dx+1]))
这样会产生良好的结果。但是,它非常慢,循环运行。
对于如何在速度上改进此算法的想法,我将非常感谢,例如使用KDtree或类似的东西。
最佳答案
在这种情况下使用cKDTree
看起来像:
from scipy.spatial import cKDTree
obs2 = array with shape (2, m)
obs1 = array with shape (2, n)
kdt = cKDTree(obs2.T)
dist, indices = kdt.query(obs1.T)
其中,
indices
将包含obs2
中与obs1
中的每个观测值相对应的列索引。请注意,我必须转置obs1
和obs2
。关于python - 有效匹配两个数组(如何使用KDTree),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15525493/