2

2 つの 2 次元配列がobs1ありobs2ます。これらは 2 つの独立した測定系列を表し、両方ともdim0 = 2と、わずかに異なるdim1、たとえば とobs1.shape = (2, 250000)を持ちobs2.shape = (2, 250050)ます。obs1[0]obs2[0]は時間を表し、 と はobs1[1]何らかのobs2[1]空間座標を表します。どちらの配列も (多かれ少なかれ) 時間でソートされています。時間と座標は 2 つの測定シリーズ間で同一である必要がありますが、実際にはそうではありません。また、からの各測定obs1値が対応する値を持つわけではなくobs2、その逆もあります。もう 1 つの問題は、時間にわずかなオフセットがある可能性があることです。

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 などを使用して、このアルゴリズムの速度を改善する方法についてのアイデアに非常に感謝しています。

4

1 に答える 1

1

この場合の使用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)

whereには、 の各観測に対応するindicesの列インデックスが含まれます。と を転置しなければならなかったことに注意してください。obs2obs1obs1obs2

于 2014-10-17T12:51:26.513 に答える