我有2组2D点(A和B),每组有大约540点。我需要找到集合B中距离A中所有点的定义距离α更远的点。
我有一个解决方案,但速度不够快
# find the closest point of each of the new point to the target set
def find_closest_point( self, A, B):
outliers = []
for i in range(len(B)):
# find all the euclidean distances
temp = distance.cdist([B[i]],A)
minimum = numpy.min(temp)
# if point is too far away from the rest is consider outlier
if minimum > self.alpha :
outliers.append([i, B[i]])
else:
continue
return outliers
我正在使用带有numpy和scipy的python 2.7。还有另一种方法可以让我获得相当大的速度提升吗?
提前感谢您的答案
答案 0 :(得分:4)
>>> from scipy.spatial.distance import cdist
>>> A = np.random.randn(540, 2)
>>> B = np.random.randn(540, 2)
>>> alpha = 1.
>>> ind = np.all(cdist(A, B) > alpha, axis=0)
>>> outliers = B[ind]
为您提供所需的积分。
答案 1 :(得分:0)
如果你有一个非常大的点数,你可以计算x&添加&的界限减去aplha然后从位于该边界之外的特定考虑中消除b中的所有点。