關於如何執行此操作的總計空白。檢索另一個陣列中匹配點的索引
我有一個數組「點」和陣列「」含有一些的那些點的:
points = numpy.array([[1,2],[4,0],[3,0],[2,4]])
a = numpy.array([[1,2], [3,0]])
我怎樣才能獲得該索引中的點「點」在([0,2] ),最好沒有循環?
關於如何執行此操作的總計空白。檢索另一個陣列中匹配點的索引
我有一個數組「點」和陣列「」含有一些的那些點的:
points = numpy.array([[1,2],[4,0],[3,0],[2,4]])
a = numpy.array([[1,2], [3,0]])
我怎樣才能獲得該索引中的點「點」在([0,2] ),最好沒有循環?
這是一個O(n²)操作,並不意味着沒有循環的直接方法。
以下解決方案適用於任何尺寸的points
和a
的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
值工作。
對於很多點,將a
置於scipy.spatial.cKDTree中,然後執行查詢以找到每個point
最近的a
。 這需要O(N ln N)用於隨機分佈的點,請參閱Kd tree; 循環是在cython,如此之快。