[英]Finding closest pair of coordinates from a list
我正在尝试实施以前的SO 问题的解决方案
我有一对坐标,我希望在坐标列表中找到最接近的相关坐标对。
这可以通过找到点之间距离最小的对来实现:
dist = lambda s,d: (s[0]-d[0])**2+(s[1]-d[1])**2
我有一本字典,来源:
{u'toid': u'osgb4000000029928750', u'point': [524511.405, 184846.794]}
我有另一个包含坐标对的列表,d_origins:
[(532163.5648939193, 181848.77608212957),(532449.8292416488, 181847.71793660522), (532200.2156880093, 182053.30247829395), (533794.6284605444, 181119.5631480558)]
然后我尝试通过调用 dist lambda 函数来查找匹配值:
match = min((origin[0]['point']),key=partial(dist,d_origins))
print origins, match
但是,输出是:
TypeError: 'float' object has no attribute '__getitem__'
min
函数接受一个列表或可迭代对象。 此外,排序可以由带有一个参数的函数指定。 这意味着该函数将一个元素映射到一个值,然后由min
函数进行比较以找到最小元素。
match = min(d_origins, key=lambda p: dist(p, origin['point']))
lambda 表达式通过提供其中一个参数将带有两个参数的dist
函数包装为带有一个参数的函数。 新的匿名函数将坐标与 lambda 表达式中的特定原点进行比较。 然后, min
函数的结果是最接近该原点的坐标。
完整示例:
>>> dist = lambda s,d: (s[0]-d[0])**2+(s[1]-d[1])**2
>>> origin = {'toid': 'osgb4000000029928750', 'point': [524511.405, 184846.794]}
>>> d_origins = [(532163.5648939193, 181848.77608212957),(532449.8292416488, 181847.71793660522), (532200.2156880093, 182053.30247829395), (533794.6284605444, 181119.5631480558)]
>>>
>>> match = min(d_origins, key=lambda p: dist(p, origin['point']))
>>> print(str(match))
(532200.2156880093, 182053.30247829395)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.