【发布时间】:2016-02-19 01:01:27
【问题描述】:
我有 2 个 numpy 数组(比如 X 和 Y),每行代表一个点向量。
我想找到 X 中的每个点到 Y 中的每个点之间的平方欧几里得距离(将称为“距离”)。
我希望输出是一个矩阵 D,其中 D(i,j) 是 dist(X(i) , Y(j))。
我有以下基于的python代码:http://nonconditional.com/2014/04/on-the-trick-for-computing-the-squared-euclidian-distances-between-two-sets-of-vectors/
def get_sq_distances(X, Y):
a = np.sum(np.square(X),axis=1,keepdims=1)
b = np.ones((1,Y.shape[0]))
c = a.dot(b)
a = np.ones((X.shape[0],1))
b = np.sum(np.square(Y),axis=1,keepdims=1).T
c += a.dot(b)
c -= 2*X.dot(Y.T)
return c
我试图避免循环(我应该吗?)并使用矩阵 mult 来进行快速计算。但是我在大型阵列上遇到了“内存错误”的问题。也许有更好的方法来做到这一点?
【问题讨论】:
-
@cel 仅在 2 点之间
-
@cel 这很好,但它在一个矩阵的所有点之间。我有两个矩阵。此外,我不需要来自同一矩阵的点之间的距离
-
如果你连接 X 和 Y,你可以使用 cel 的信息,尽管这样效率不高,因为你将在此过程中计算 X 到 X 和 Y 到 Y 的距离。
-
几乎与stackoverflow.com/q/1871536/1461210 完全相同(尽管是平方欧几里得距离)
-
我清理了我的尝试。他们并没有真正的帮助。
标签: python performance numpy euclidean-distance