找到最接近给定x的点?

时间:2015-08-21 11:00:54

标签: python algorithm function

我需要插入线性函数,我不能使用numpyscipy

我给出了这个数据点((0,10), (1,4), (2,3), (3,5), (4,12))和一个点'x = 2.8。数据点是折线(2坐标之间的线性)

当然,我需要使用距离x数据最近的2.8点。来自(2,3)(3,5),因为2.8位于23之间。

如何制作找到最近点的函数?

4 个答案:

答案 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)

pointApointB是距您x最近的低点和高点。