2D Nearest Neighbor Interpolation in Python 2D Nearest Neighbor Interpolation in Python numpy numpy

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:

enter image description herewith red = 1, blue =0

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