我需要插入线性函数,我不能使用numpy
或scipy
。
我给出了这个数据点((0,10), (1,4), (2,3), (3,5), (4,12))
和一个点'x = 2.8。数据点是折线(2坐标之间的线性)
当然,我需要使用距离x
数据最近的2.8
点。来自(2,3)
和(3,5)
,因为2.8
位于2
和3
之间。
如何制作找到最近点的函数?
答案 0 :(得分:2)
def closest(points, x):
return sorted(points, key=lambda p: abs(p[0] - x))[:2]
>>> points = ((0,10), (1,4), (2,3), (3,5), (4,12))
>>> x = 2.8
>>> closest(points, x)
[(3, 5), (2, 3)]
这也可以不使用lambda函数编写(但x
必须是全局的):
def mySortKey(p):
return abs(p[0] - x)
def closest(points):
return sorted(points, key = mySortKey)[:2]
答案 1 :(得分:0)
您可以从消除未绑定目标点的对开始。
x = 2.8
given = [(0,10), (1,4), (2,3), (3,5), (4,12)]
fewer = [(a,b) for a,b in given if a <= x and b >= x]
然后你可能想选择限制点的最小范围。
result = min(fewer, key = lambda l: l[1]-l[0])
您可以通过组合这些步骤来改进此方法,但此解决方案可将问题分解为更小的组件。
我会留给你把它变成一个函数。
答案 2 :(得分:0)
您可以计算所选点的距离。
1)搜索最小距离X值(左和右)。
2)搜索与X_MIN_LEFT和X_MIN_RIGHT对应的每个点。同时,您可以使用Y检查距离并找到最小Y距离。
那就是它。
答案 3 :(得分:0)
可以肯定的是,唯一重要的是你的2元组的第一个值?
这是一种非常简单的方法:
def getNearest(x, points) :
smaller = [point for point in points if point[0] <= x]
greater = [point for point in points if point[0] >= x]
smallest = max(sorted(smaller))
greatest = min(sorted(greater))
return smallest, greatest
points = ((0,10), (1,4), (2,3), (3,5), (4,12))
x = 2.8
pointA, pointB = getNearest(x, points)
pointA
和pointB
是距您x
最近的低点和高点。