我正在使用: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';