Interpolation 2D#
interp2d interpolates 2D gridded data. Input is a pair of 1D coordinate vectors and a 2D value matrix; the output
is the interpolated surface on the query grid.
Bilinear interpolation#
import numpy as np
from pflm.interp import interp2d
x1 = np.linspace(-1, 1, 21)
x2 = np.linspace(-1, 1, 21)
X1, X2 = np.meshgrid(x1, x2, indexing="ij")
Z = np.sin(np.pi * X1) * np.cos(np.pi * X2)
x1q = np.linspace(-1, 1, 51)
x2q = np.linspace(-1, 1, 51)
Zq = interp2d(x1, x2, Z, x1q, x2q, method="linear")
print("Output shape:", Zq.shape) # (51, 51)
Bicubic spline interpolation#
For smoother surfaces, switch to spline.
Zq_spline = interp2d(x1, x2, Z, x1q, x2q, method="spline")
# Ground truth on query grid
X1q, X2q = np.meshgrid(x1q, x2q, indexing="ij")
Z_true = np.sin(np.pi * X1q) * np.cos(np.pi * X2q)
print("Linear max-err:", np.max(np.abs(Zq - Z_true)))
print("Spline max-err:", np.max(np.abs(Zq_spline - Z_true)))