Python 中的二维最近邻插值
2D Nearest Neighbor Interpolation in Python
假设我们有以下查找 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
这个table包含一个标签矩阵(只有0
和1
),x
个值和y
个值。如何使用 最近邻插值法 来查找 table?
示例:
Input: (5.1, 4.9)
Output: 1
Input: (3.54, 6.9)
Output: 0
查找table
如果你有完整的 table 你不需要插值,你只需要查找最近的 (x, y) 值的索引并在 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
如果你的数据是由分散的点组成的,那将非常有用
例如,对于这样的数据:
红色 = 1,蓝色 =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
假设我们有以下查找 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
这个table包含一个标签矩阵(只有0
和1
),x
个值和y
个值。如何使用 最近邻插值法 来查找 table?
示例:
Input: (5.1, 4.9)
Output: 1
Input: (3.54, 6.9)
Output: 0
查找table
如果你有完整的 table 你不需要插值,你只需要查找最近的 (x, y) 值的索引并在 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
如果你的数据是由分散的点组成的,那将非常有用
例如,对于这样的数据:
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