手工制作标准化的pDist2

时间:2017-01-17 10:53:58

标签: matlab

我正在使用:D = pdist2(X,Y,'seuclidean');这是一个标准化的欧几里德距离。是否有可能提供这种距离的手工实现,以便了解进行了哪些计算?

谢谢。

PS:非常感谢矢量化实现。

修改 按照与此处描述的方法类似的方法,我们可能会有以下内容。然而,手工制作的标准化距离与Matlab构建功能所给出的距离并不完全相同。你能给点暗示吗?

clc
clear all

N = 100;
K = 200;
M = 20;
X = randn(N,M);
Y = randn(K,M);

tic;D1 = pdist2(X,Y).^2;toc
tic;D2 = repmat(sum((X.^2),2), 1, K) + repmat(sum((Y.^2),2)', N, 1) - 2.*X*Y';toc

stdD = std([X;Y],[],1).^2;
nX = bsxfun(@rdivide, X, stdD);
nY = bsxfun(@rdivide, Y, stdD);

nD1 = pdist2(X,Y,'seuclidean').^2;
nD2 = repmat(sum(nX.^2,2), 1, K) + repmat(sum((nY.^2),2)', N, 1) - 2.*nX*nY';

0 个答案:

没有答案