我有两个嵌套列表 A 和 B:
A = [[50,140],[51,180],[54,500],......]
B = [[50.1, 170], [51,200],[55,510].....]
每个内部列表中的第一个元素从 0 到大约 1e5,第 0 个元素从大约 50 到大约 700,这些元素是未排序的。我想要做的是遍历 A[n][1] 中的每个元素并在 B[n][1] 中找到最近的元素,但是在搜索最近的邻居时,我只想在定义的区间内搜索A[n][0] 正负 0.5。
我一直在使用这个功能:
def find_nearest_vector(array, value):
idx = np.array([np.linalg.norm(x+y) for (x,y) in array-value]).argmin()
return array[idx]
例如,它会找到坐标A[0][:]
和之间的最近邻居B[0][:]
。但是,我需要将搜索范围限制在一个围绕值 A[0][0] 的一些小偏移的矩形内。另外,我不想重用元素 - 我想要在区间 A[n][0] +/- 0.5 内的每个值 A[n][1] 到 B[n][1] 之间的唯一双射。
我一直在尝试使用 Scipy 的 KDTree,但这会重用元素,我不知道如何限制搜索范围。实际上,我想沿特定轴在二维嵌套列表上进行一维 NNN 搜索,其中 NNN 搜索的邻域位于由每个内部列表中的第 0 个元素定义的超矩形内,加上或减去一些小位移.