1D不规则网格到1d规则网格

时间:2013-05-20 13:17:24

标签: python numpy scipy

我想在一维数组中将值从不规则网格插入到常规网格中。例如,假设原始数据具有不规则间隔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坐标数组的每个点的原始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)

但是,我不太喜欢这种方法......

1 个答案:

答案 0 :(得分:2)

对于线性插值,只需使用numpy.interp()。如果您需要索引本身,请使用numpy.searchsorted()。唯一棘手的问题是处理数据范围之外的网格值。获得指数后,距离很容易计算。