1

我有以下内容:

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;

我将不胜感激任何建议。

4

1 回答 1

0

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

D = pdist2(A,B).^2

或者您可以使用bsxfunand手动完成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
于 2016-08-17T12:12:38.530 回答