per_axis_interpolator

odl.discr.discr_utils.per_axis_interpolator(f, coord_vecs, interp)[source]

Return a per axis defined interpolator for discrete values.

With this function, the interpolation scheme can be chosen for each axis separately.

Parameters:
fnumpy.ndarray

Function values that should be interpolated.

coord_vecssequence of numpy.ndarray

Coordinate vectors of the rectangular grid on which interpolation should be based. They must be sorted in ascending order. Usually they are obtained as grid.coord_vectors from a RectGrid.

interpstr or sequence of str

Indicates which interpolation scheme to use for which axis. A single string is interpreted as a global scheme for all axes.

Examples

Choose linear interpolation in the first axis and nearest neighbor in the second:

>>> part = odl.uniform_partition([0, 0], [1, 5], shape=(2, 4))
>>> part.coord_vectors
(array([ 0.25,  0.75]), array([ 0.625,  1.875,  3.125,  4.375]))
>>> f = np.array([[1, 2, 3, 4],
...               [5, 6, 7, 8]],
...              dtype=float)
>>> interpolator = per_axis_interpolator(
...     f, part.coord_vectors, ['linear', 'nearest']
... )
>>> interpolator([1, 1])  # single point
2.5
>>> x = np.array([[0.5, 2.0],
...               [0.0, 4.5],
...               [0.0, 3.0]]).T  # 3 points at once
>>> interpolator(x)
array([ 4. ,  2. ,  1.5])
>>> from odl.discr.grid import sparse_meshgrid
>>> mesh = sparse_meshgrid([0.0, 0.5, 1.0], [1.5, 3.5])
>>> interpolator(mesh)  # 3x2 grid of points
array([[ 1. ,  1.5],
       [ 4. ,  5. ],
       [ 3. ,  3.5]])