在Python中,什么';求二维最接近整数的最佳方法是什么?
我有一个二维元组列表,未排序,大小为在Python中,什么';求二维最接近整数的最佳方法是什么?,python,Python,我有一个二维元组列表,未排序,大小为nsize。我想找出哪个元组的维数与X和Y最接近。最好的方法是什么 target = (75, 75) values = [ (38, 61), (96, 36), (36, 40), (99, 83), (74, 76), ] 使用目标和值,该方法应生成答案(74,76) 编辑 对于在这里登陆的任何人来说,这条路都会让我找到一个确切的方法: def distance(item, target): return
n
size。我想找出哪个元组的维数与X和Y最接近。最好的方法是什么
target = (75, 75)
values = [
(38, 61),
(96, 36),
(36, 40),
(99, 83),
(74, 76),
]
使用目标
和值
,该方法应生成答案(74,76)
编辑
对于在这里登陆的任何人来说,这条路都会让我找到一个确切的方法:
def distance(item, target):
return ((item[0] - target[0]) ** 2 + (item[1] - target[1]) ** 2) ** 0.5
best = min(values, key=lambda x: distance(x, target))
这是一个问题
x
减去最佳x
值的平方y
的平方减去最佳y
值min
功能)将为您提供最佳匹配这是一种方法。只是从另一个角度看待这个问题。由于这是一个笛卡尔平面问题,请将其转换为复杂平面并求解
def distance(tup1,tup2):
"""
This question is unanswerable unless you can specify this
examples for 2d (you can write more general N-dimensional code if you need):
cartesian: math.sqrt((tup2[0]-tup1[0])**2 + (tup2[1]-tup1[1])**2)
manhattan: (tup2[0]-tup1[0]) + (tup2[1]-tup1[1])
"""
return # YOUR CODE HERE
min(values, key=lambda x:distance(target,x))
>>> min((abs(complex(*e)-complex(*target)),e) for e in values)[-1]
(74, 76)
,这个问题是无法回答的,除非你定义了“维度”的含义,以及“维度接近”的含义。哦,这里使用lambda,这就是我所缺少的+1.谢谢,您假设列表元素总是二维的,这是正确的。我将更新我的问题以获得最终代码,但这是答案。再次感谢。@sberry:哦,对不起,我应该编辑你的答案而不是回复。作为记录,还可以定义一个通用函数,
def distance to target(x):返回距离(target,x)
(或者使用functools.partial
,这是一种实现较差的函数)。如果target
是一个全局变量,可以在keyfunc中将其声明为global target
。在2d情况下,还有math.hypot
。如果只是求最小值,则不需要求平方根(使d^2最小化的值也将使d最小化)。不过,这些只是一些调整,Python的开销非常大,每当我猜什么是没有计时的最快速度时,我就猜错了。。
>>> min((abs(complex(*e)-complex(*target)),e) for e in values)[-1]
(74, 76)