在numpy中找到n个点到m个点之间的平方距离
Finding squared distances beteen n points to m points in numpy
我有 2 个 numpy 数组(比如 X 和 Y),每行代表一个点向量。
我想找到 X 中的每个点到 Y 中的每个点之间的平方欧氏距离(将称之为 'dist')。
我希望输出是矩阵 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
我试图避免循环(我应该吗?)并使用矩阵乘法来进行快速计算。但是我在大型阵列上遇到 "Memory Error" 的问题。也许有更好的方法来做到这一点?
Scipy 的 cdist
函数完全符合您的要求:
from scipy.spatial import distance
distance.cdist(X, Y, 'sqeuclidean')
上面链接的文档有一些很好的例子。
我有 2 个 numpy 数组(比如 X 和 Y),每行代表一个点向量。
我想找到 X 中的每个点到 Y 中的每个点之间的平方欧氏距离(将称之为 'dist')。
我希望输出是矩阵 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
我试图避免循环(我应该吗?)并使用矩阵乘法来进行快速计算。但是我在大型阵列上遇到 "Memory Error" 的问题。也许有更好的方法来做到这一点?
Scipy 的 cdist
函数完全符合您的要求:
from scipy.spatial import distance
distance.cdist(X, Y, 'sqeuclidean')
上面链接的文档有一些很好的例子。