Home > Net >  python library for interporate randomly located 2d points based on regular gridded date points
python library for interporate randomly located 2d points based on regular gridded date points

Time:09-29

Do you know some well-known python library for interpolate randomly located 2d points based on regular grid date points?

Note that data points to create an interpolator is on regular grid. But evaluation points are not on regular grid.

context

Let me explain the context. In my application, data points to create an interpolator is on a regular grid. However, at the evaluation time, the points to be evaluated are on random locations (say np.random.rand(100, 2)).

As far as I know, most used library for 2d interpolation is scipy's interp2d. But at the evaluation time interp2d takes grid coordinates X and Y instead of points as the following documentation describe.

Of course, it is possible to do something like

values = []
for p in np.random.rand(100, 2):
    value = itp([p[0]], [p[1]])
    values.append(value)

or to avoid for-loop

pts = np.random.rand(100, 2)
tmp = itp(pts[:, 0], pts[:, 1])
value = tmp.diagonal()

But both method is two inefficient. First one will be slow by for loop (run code as possible as in c-side) and the second one is wasteful because evaluate N^2 points for getting results for only N points.

CodePudding user response:

scipy.interpolate.RegularGridInterpolator does. By this, one can create interpolator using gridded data points, and at evaluation time it takes 2dim numpy array with shape (n_points, n_dim).

For example:

import numpy as np
from scipy.interpolate import RegularGridInterpolator

x = np.linspace(0, 1, 20)
y = np.linspace(0, 1, 20)
f = np.random.randn(20, 20)

itp = RegularGridInterpolator((x, y), f)

pts = np.random.rand(100, 2)
f_interped = itp(pts)
  • Related