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

时间:2016-08-16 17:43:44

标签: matlab matrix vector euclidean-distance norm

我有以下内容:

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');

其中 D N1 x D1 矩阵。

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

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

我将不胜感激任何建议。

1 个答案:

答案 0 :(得分:0)

如果你有统计工具箱,你可以使用pdist2,这就是:

D = pdist2(A,B).^2

或者您可以使用bsxfunpermute手动执行此操作:

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