检索另一个数组中匹配点的索引

时间:2011-11-04 13:48:46

标签: python numpy indices

关于如何执行此操作的总空白。

我有一个数组“points”和一个包含其中一些点的数组“a”:

points = numpy.array([[1,2],[4,0],[3,0],[2,4]])
a = numpy.array([[1,2], [3,0]])

如何获得([0,2])中点数“点”的指数,最好没有循环?

2 个答案:

答案 0 :(得分:0)

这是一个O(n²)操作,并不意味着没有循环的直接方法。

以下解决方案适用于pointsa的任意大小的2D变量。

import numpy as np
points = np.array([[1,2],[4,0],[3,0],[2,4]])
a = np.array([[1,2], [3,0]])


np.array([np.argwhere((points==a[i]).all(axis=1))[0][0] for i in xrange(a.shape[0])])
# returns array([0, 2])

但是,这不适用于a中遗失的points的值。

答案 1 :(得分:0)

对于很多点,请将a放在scipy.spatial.cKDTree中,然后执行查询以查找距离a最近的point。 对于随机分布的点,这需要O(N ln N),参见Kd tree; 循环是cython,速度很快。