2
我想插值從一個不規則網格到一個常規網格的一維數組中。例如,假設原始數據具有在不規則地間隔開的X值的座標:1D不規則網格到1d規則網格
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_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)
不過,我不喜歡這種方式那麼多。 ..
對於線性插值,只需使用'numpy.interp()'。如果你自己需要索引,使用'numpy.searchsorted()'。唯一棘手的問題是處理數據範圍之外的網格值。一旦你有了指數,距離很容易計算。 –
感謝您的回答,'numpy.searchsorted'是找到一維數組中索引的好方法,而且權重(距離)也很容易計算出來。 –
@RobertKern您的評論就是答案!您可以將其作爲正式答案發布,以便人們可以更快地找到它。 –