gpt4 book ai didi

KDTree 中的 python 点索引

转载 作者:太空宇宙 更新时间:2023-11-03 11:48:22 26 4
gpt4 key购买 nike

给定点列表,如何在 KDTree 中获取它们的索引?

from scipy import spatial
import numpy as np

#some data
x, y = np.mgrid[0:3, 0:3]
data = zip(x.ravel(), y.ravel())

points = [[0,1], [2,2]]

#KDTree
tree = spatial.cKDTree(data)

# incices of points in tree should be [1,8]

我可以这样做:

[tree.query_ball_point(i,r=0) for i in points]

>>> [[1], [8]]

这样做有意义吗?

最佳答案

使用cKDTree.query(x, k, ...)找到一组给定点 xk 最近邻:

distances, indices = tree.query(points, k=1)
print(repr(indices))
# array([1, 8])

在这种简单的情况下,您的数据集和查询点集都很小,并且每个查询点都与数据集中的一行相同,使用简单的 bool 运算和广播会更快而不是构建和查询 k-D 树:

data, points = np.array(data), np.array(points)
indices = (data[..., None] == points.T).all(1).argmax(0)

data[..., None] == points.T 广播到一个 (nrows, ndims, npoints) 数组,这可能很快就会变得昂贵更大数据集的内存。在这种情况下,您可能会从普通的 for 循环或列表理解中获得更好的性能:

indices = [(data == p).all(1).argmax() for p in points]

关于KDTree 中的 python 点索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33823706/

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