【发布时间】:2019-12-18 20:12:26
【问题描述】:
我有 2 个图像中点的坐标列表。
说,
List1 = [[2,3],[4,5],[10,20],[45,60]]
List2 = [[100,50],[65,48],[58,32],[98,45]...............[655,254],[232,545]]
dist = 20
List1 将有 5 或 6 个元素。
List2 可以有超过 1000 个元素。
我想生成一个list3,其中我只有来自List2 的坐标,其与List1 中所有点的欧几里得距离大于dist=20。
基本上,我的目标是从List2 中删除与List1 中的点相距一定距离的所有点。
目前,我正在做这样的事情
from scipy.spatial.distance import cdist
def newlist(list1, list2, dist):
edist = cdist(list2, list1)
highvalues = edist > dist
edist[highvalues] = 0
edist[~highvalues] = 1
indx = edist.sum(axis=1)
list3 = [list2[i] for i, e in enumerate(indx) if e == 0]
return list3
运行时间:52us
【问题讨论】:
-
1.遍历列表 2 的项目 | 2. 在第一个循环中,遍历列表 1 的项目并使用 numpy.linalg.norm() 计算距离 | 3. 如果全部匹配,则将列表 1 的项追加到三个
标签: python list filtering coordinates euclidean-distance