【问题标题】:Finding squared distances beteen n points to m points in numpy在numpy中查找n点到m点之间的平方距离
【发布时间】: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


【解决方案1】:

Scipy 具有 cdist 功能,可以完全满足您的需求:

from scipy.spatial import distance
distance.cdist(X, Y, 'sqeuclidean')

上面链接的文档有一些很好的例子。

【讨论】:

  • 'sqeuclidean' 实际上。
  • 对双方都好。固定。
  • 它在后台使用矩阵乘法吗? @AdamAcosta
猜你喜欢
  • 2013-12-09
  • 2021-11-04
  • 2019-09-16
  • 2012-06-20
  • 1970-01-01
  • 2019-01-02
  • 1970-01-01
  • 2023-01-20
  • 2020-02-29
相关资源
最近更新 更多