2D Nearest Neighbor Interpolation in Python
Look up table
If you have the complete table you don't need interpolation, you just need to look up the index of the nearest (x, y) value and use it on the table
In [1]: import numpy ...: x = numpy.array([1.23, 2.63, 4.74, 6.43, 5.64]) ...: y = numpy.array([2.56, 4.79, 6.21]) ...: data = numpy.array([[0, 0, 1, 0, 1], ...: [0, 1, 1, 1, 0], ...: [1, 0, 0, 0, 0]]) ...: ...: def lookupNearest(x0, y0): ...: xi = numpy.abs(x-x0).argmin() ...: yi = numpy.abs(y-y0).argmin() ...: return data[yi,xi]In [2]: lookupNearest(5.1, 4.9)Out[2]: 1In [3]: lookupNearest(3.54, 6.9)Out[3]: 0
Nearest-neighbor interpolation
scipy.interpolate.NearestNDInterpolator
will be really useful if your data is composed by scattered points
For example, for data like:
In [4]: points = numpy.array([[1.1, 2.5], ...: [1.5, 5.2], ...: [3.1, 3.0], ...: [2.0, 6.0], ...: [2.8, 4.7]]) ...: values = numpy.array([0, 1, 1, 0, 0])In [5]: from scipy.interpolate import NearestNDInterpolator ...: myInterpolator = NearestNDInterpolator(points, values)In [6]: myInterpolator(1.7,4.5)Out[6]: 1In [7]: myInterpolator(2.5,4.0)Out[7]: 0