我有2个numpy数组(比如X和Y),每行代表一个点向量 我想在X中的每个点到Y中的每个点之间找到平方的欧氏距离(将其称为“#39; dist'”)。 我希望输出为矩阵D,其中D(i,j)为dist(X(i),Y(j))。
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来进行快速计算。但是我遇到了#34; Memory Error"在大型阵列上。也许还有更好的方法可以做到这一点?
答案 0 :(得分:5)
Scipy拥有cdist
功能,完全符合您的要求:
from scipy.spatial import distance
distance.cdist(X, Y, 'sqeuclidean')
上面链接的文档有一些很好的例子。