Python 一维不规则网格到一维规则网格

Python 一维不规则网格到一维规则网格,python,numpy,scipy,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) 我想为目标des

我想把一维数组中的值从不规则网格插值到规则网格。例如,假设原始数据在不规则间隔的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)
我想为目标
dest\ux
坐标数组中的每个点找到原始
source\ux
坐标数组中两个最近元素的距离和索引。例如:

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)

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

对于线性插值,只需使用
numpy.interp()
。如果需要索引本身,请使用
numpy.searchsorted()
。唯一棘手的是处理超出数据范围的网格值。一旦有了索引,距离就很容易计算。

对于线性插值,只需使用
numpy.interp()
。如果需要索引本身,请使用
numpy.searchsorted()
。唯一棘手的是处理超出数据范围的网格值。一旦你有了索引,距离就很容易计算。谢谢你的回答,
numpy.searchsorted
是在1D数组中查找索引的好方法,权重(距离)以前也很容易计算。@RobertKern你的评论就是答案!你可以把它作为官方答案发布,这样人们可以更快地找到它。。。