2011-11-04 56 views
0

關於如何執行此操作的總計空白。檢索另一個陣列中匹配點的索引

我有一個數組「點」和陣列「」含有一些的那些點的:

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

我怎樣才能獲得該索引中的點「點」在([0,2] ),最好沒有循環?

回答

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]) 

然而,這並沒有從points缺失的a值工作。

0

對於很多點,將a置於scipy.spatial.cKDTree中,然後執行查詢以找到每個point最近的a。 這需要O(N ln N)用於隨機分佈的點,請參閱Kd tree; 循環是在cython,如此之快。