2

不規則なグリッドから通常のグリッドに 1D 配列の値を補間したいと考えています。たとえば、元のデータが不規則な間隔の X 座標に値を持っているとします。

source_x = np.asarray([127.3, 759.4, 1239.1, ..., 98430.1])
source_y = whatever(x) # No really a function but a set of masurements

宛先グリッドも 1D ですが、X 座標は軸に沿って等間隔に配置されています。

dest_x = np.arange(250, 100000, 500)

source_x宛先座標配列のすべてのポイントについて、元の座標配列で最も近い 2 つの要素の距離とインデックスを見つけたいと考えていますdest_x。例えば:

dest_x[0] = 250
indices = [0, 1]
distances = [250-127.3, 759.4-250]

可能であれば、これはアトミック操作として実行する必要があります。

私の最初のアイデアは を使用することでしたscipy.spatial.KDTreeが、これは 1D データを許可しません。他のオプションはありますか?

編集

ゼロの「ダミー」座標を含む「醜い」オプションがあり、次を使用できますscipy.spatial.KDTree

source_x = np.asarray([127.3, 759.4, 1239.1, ..., 98430.1])
source_dummy = np.zeros_like(source_x)

dest_x = np.arange(250, 100000, 500)
dest_dummy = np.zeros_like(dest_x)

src = np.vstack((source_x, source_dummy)).T
dst = np.vstack((dest_x, dest_dummy)).T

tree = KDTree(src)
distances, indices = tree.query(dst, 2)

しかし、私はこのアプローチがあまり好きではありません...

4

1 に答える 1

2

線形補間の場合は、 を使用してnumpy.interp()ください。インデックス自体が必要な場合は、 を使用しますnumpy.searchsorted()。唯一の注意点は、データ範囲外のグリッド値を処理することです。インデックスがあれば、距離は簡単に計算できます。

于 2013-06-03T14:23:09.227 に答える