如何为欧氏距离计算操作矩阵加法和乘法?

How to manipulate matrix addition and multiplication for Euclidean distance computation?

我有以下内容:

A = [1 2 3; 4  5 6; 7 8 9];
B = [10 11 12; 13 14 15];

[N1, D1] = size(A);
[N2, D2] = size(B);

A_sq = sum(A.^2, 2);
B_sq = sum(B.^2, 2)';
D = A_sq(:,ones(1,N2)) + B_sq(ones(1,N1),:) - 2.*(A*B');

其中 DN1 x D1 矩阵。

我想一步写出 D 的表达式,即类似这样的东西(这是为了说明目的,但它应该计算与上面代码相​​同的欧氏距离):

D = sum(A - B).^2;

如有任何建议,我将不胜感激。

如果您有 Statistics Toolbox,您可以使用 pdist2,它就是这样做的:

D = pdist2(A,B).^2

或者您可以使用 bsxfun and permute 手动完成:

D = permute((sum(bsxfun(@minus, A, permute(B, [3 2 1])).^2,2)), [1 3 2]);

对于您的示例矩阵

A = [1 2 3; 4  5 6; 7 8 9];
B = [10 11 12; 13 14 15];

以上任一项给出

D =
   243   432
   108   243
    27   108