Suppose that we have the following look up table
| 1.23 2.63 4.74 6.43 5.64
-------|--------------------------------------
-------|--------------------------------------
2.56 | 0 0 1 0 1
4.79 | 0 1 1 1 0
6.21 | 1 0 0 0 0
This table contains a labeling matrix (having only 0
and 1
s), x
values and y
values. How one can have nearest-neighbor interpolation for this look up table?
Example:
Input: (5.1, 4.9)
Output: 1
Input: (3.54, 6.9)
Output: 0
Interpolate over a 2-D grid. x, y and z are arrays of values used to approximate some function f: z = f(x, y) which returns a scalar value z. This class returns a function whose call method uses spline interpolation to find the value of new points.
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]: 1
In [3]: lookupNearest(3.54, 6.9)
Out[3]: 0
scipy.interpolate.NearestNDInterpolator
will be really useful if your data is composed by scattered points
For example, for data like:
with 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]: 1
In [7]: myInterpolator(2.5,4.0)
Out[7]: 0
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With