【发布时间】:2017-03-17 11:58:30
【问题描述】:
我有一个 np 数组,X 大小为 1000 x 1000,其中每个元素都是实数。我想为这个 np 数组的每一行中的每个点找到 5 个最近的点。这里距离度量可以只是 abs(x-y)。我已经尝试过
for i in range(X.shape[0]):
knn = NearestNeighbors(n_neighbors=5)
knn.fit(X[i])
for j in range(X.shape[1])
d = knn.kneighbors(X[i,j], return_distance=False)
但是,这对我不起作用,我不确定它的效率如何。有没有解决的办法?我见过很多比较向量的方法,但没有看到任何比较单个元素的方法。我知道我可以使用 for 循环和循环并找到 k 最小的,但这在计算上会很昂贵。 KD树可以为此工作吗?我尝试过类似于
的方法Finding index of nearest point in numpy arrays of x and y coordinates
但是,我无法让它工作。是否有一些我不知道的 numpy 函数可以实现这一点?
【问题讨论】:
-
“最接近”是什么意思?按价值最接近?什么是“点”?
-
所以说行 r = [1,10,11,15,18,16,19,18]。对于 r 中的每个元素,我想找到 r 中具有最接近我们正在查看的元素的值的其他 k 个元素。所以我们看 1 并找到最接近它的 k 个数字。然后我们查看 10 并找到最接近它的 k 个数字,然后......然后 18 并找到最接近它的 k 个数字。
-
是的,它是一个预测矩阵,所以行是人,列是项目
-
那么,对于每一行,您希望得到一个 1000x5 的数组作为结果吗?
-
既然您的指标如此简单,您就不能只使用
sort(或argsort)您的行吗?这会立即将候选最近邻居的数量减少到每个点 2k,其中 k 是您示例中的 5。