gpt4 book ai didi

python - 在python中找到两个列表之间最近最近邻居的索引

转载 作者:行者123 更新时间:2023-11-28 22:39:18 25 4
gpt4 key购买 nike

给定 2 个大小不等的 numpy 数组:A(预排序数据集)和 B(查询值列表)。我想在数组 A 中找到与数组 B 的每个元素最近的“下”邻居。示例代码如下:

import numpy as np

A = np.array([0.456, 2.0, 2.948, 3.0, 7.0, 12.132]) #pre-sorted dataset
B = np.array([1.1, 1.9, 2.1, 5.0, 7.0]) #query values, not necessarily sorted
print A.searchsorted(B)
# RESULT: [1 1 2 4 4]
# DESIRED: [0 0 1 3 4]

在这个例子中,B[0] 的最近邻居是 A[0] 和 A[1]。它最接近 A[1],这就是为什么 searchsorted 返回索引 1 作为匹配项,但我想要的是索引 0 处的下邻居。B[1:4] 相同,B[4] 应该匹配A[4] 因为两个值相同。

我可以像这样做一些笨拙的事情:

desired = []
for b in B:
id = -1
for a in A:
if a > b:
if id == -1:
desired.append(0)
else:
desired.append(id)
break

id+=1

print desired
# RESULT: [0, 0, 1, 3, 4]

但是必须有一种更简洁的方式来使用 numpy 来编写它。我想将我的解决方案保留在 numpy 中,因为我正在处理大型数据集,但我对其他选项持开放态度。

最佳答案

您可以引入可选参数 side 并将其设置为 'right',如 docs 中所述。然后,将最终索引结果减去 1 以获得所需的输出,就像这样 -

A.searchsorted(B,side='right')-1

sample 运行-

In [63]: A
Out[63]: array([ 0.456, 2. , 2.948, 3. , 7. , 12.132])

In [64]: B
Out[64]: array([ 1.1, 1.9, 2.1, 5. , 7. ])

In [65]: A.searchsorted(B,side='right')-1
Out[65]: array([0, 0, 1, 3, 4])

In [66]: A.searchsorted(A,side='right')-1 # With itself
Out[66]: array([0, 1, 2, 3, 4, 5])

关于python - 在python中找到两个列表之间最近最近邻居的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34913700/

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