From 791856b14e664e9503748cf522af3be567fa9930 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Tue, 14 Feb 2023 18:48:18 +0100 Subject: interp: add irregular 1D interpolation --- interp.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/interp.py b/interp.py index c567758..757d927 100644 --- a/interp.py +++ b/interp.py @@ -21,6 +21,25 @@ def interp1d(src_start, src_step, src_val, dst_coords, stencil): return ret +def interp1d_irregular(src_coord, src_val, dst_coord, stencil): + idx_src = np.empty(dst_coord.shape, dtype = np.int) + for i, dc in enumerate(dst_coord): + idx_src[i] = np.where(src_coord - dc < 0, src_coord, -np.inf).argmax() - stencil / 2 + 1 + + fact = np.zeros((stencil, ) + idx_src.shape, dtype = src_val.dtype) + 1.0 + for i in range(stencil): + for j in range(stencil): + if i == j: + continue + + fact[i] *= (dst_coord - src_coord[idx_src + j]) / (src_coord[idx_src + i] - src_coord[idx_src + j]) + + ret = np.zeros_like(dst_coord, dtype = src_val.dtype) + for i in range(stencil): + ret += fact[i] * src_val[idx_src + i] + + return ret + def interp2d(src_start, src_step, src_val, dst_coords, stencil): ret = np.zeros_like(dst_coords[0], dtype = src_val.dtype) -- cgit v1.2.3