gpt4 book ai didi

python - 具有指定范围的最近邻一维数据

转载 作者:太空狗 更新时间:2023-10-30 00:14:51 25 4
gpt4 key购买 nike

我有两个嵌套列表 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 个元素加上或减去一些小偏移定义的超矩形内.

最佳答案

我使用 numpy.argsort()numpy.searchsorted()numpy.argmin() 进行搜索。

%pylab inline
import numpy as np
np.random.seed(0)
A = np.random.rand(5, 2)
B = np.random.rand(100, 2)
xaxis_range = 0.02
order = np.argsort(B[:, 0])
bx = B[order, 0]
sidx = np.searchsorted(bx, A[:, 0] - xaxis_range, side="right")
eidx = np.searchsorted(bx, A[:, 0] + xaxis_range, side="left")
result = []
for s, e, ay in zip(sidx, eidx, A[:, 1]):
section = order[s:e]
by = B[section, 1]
idx = np.argmin(np.abs(ay-by))
result.append(B[section[idx]])
result = np.array(result)

我绘制的结果如下:

plot(A[:, 0], A[:, 1], "o")
plot(B[:, 0], B[:, 1], ".")
plot(result[:, 0], result[:, 1], "x")

输出:

enter image description here

关于python - 具有指定范围的最近邻一维数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18817021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com