【发布时间】:2020-09-07 11:45:54
【问题描述】:
我有 2 个元组列表 list1 = [(1.332, 3.23344, 3.22), (2.122, 2.11, 2.33), ... (1, 2, 3)] 和 list2 = [(4.23, 12.2, 3.333), (1.234, 3.21, 4.342), ... (1.1, 2.2, 3.3)]。这些列表都很长,两个列表都有数百万。对于上下文,这些数据点中的每一个都是对两个不同数据集中的位置的某种度量。现在我想将list1 中的每个条目对应到list2 中的一个条目,如果它“足够接近”的话。足够接近是指位置之间的距离小于某个阈值(例如 0.1)。我最初的想法是在list1 的每个条目上使用min 函数。也就是如下:
import numpy as np
import random
def dist(pt1, pt2):
return np.sqrt( ((pt2[0] - pt1[0]) ** 2) + ((pt2[1] - pt1[1]) ** 2) + ((pt2[2] - pt1[2]) ** 2) )
list1 = [(random.random(), random.random(), random.random()) for _ in range(25)]
list2 = [(random.random(), random.random(), random.random()) for _ in range(20)]
threshold = .5
linker = []
for i, entry in enumerate(list1):
m = min(list2, key=lambda x: dist(entry, x))
if dist(entry, m) < threshold:
linker.append((i, list2.index(m))
所以这会将list1 中的每个索引链接到list2 中的索引。但我觉得肯定有一些已经开发出来的算法专门针对这个任务,速度要快得多,是吗?
【问题讨论】:
标签: python python-3.x performance time-complexity