簡體   English   中英

從列表中查找最近的坐標對

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM