在 MATLAB 中计算一个矩阵与另一个矩阵之间的差矩阵
Compute the difference matrix between a matrix and another matrix in MATLAB
在 matlab 中给定一个矩阵 A
:
3 1
4 5
7 8
和另一个矩阵B
可以作为一些参考点(每行是参考点,要与A
的每一行进行比较),
1 1
1 2
我需要计算一个矩阵 C
,这样
4 5
25 18
85 72
其中 C
的每一行是 A
的每一行与 B
的行之间的差异(平方 L2 范数)。在 MATLAB 中执行此操作的一种可能方法是首先创建一个零矩阵 C
、C = zeros(5,2)
,然后使用双 for 循环填充适当的值。在 MATLAB 中还有其他 efficient/simpler 方法吗?
找到下面的代码片段
C = zeros(5,2)
for i = 1:rows
for j = 1:rows2
C(i,j) = (norm(A(i,:)-B(j,:)))^2
end
end
也许你可以像下面那样尝试bsxfun
A = [3,1; 4,5;7,8];
B = [1,1;1,2];
% you can first rewrite A and B in complex coordinates to simplify the computation, and then compute difference of two complex values
C = abs(bsxfun(@minus,A*[1;1j],transpose(B*[1;1j]))).^2;
你会得到
C =
4.0000 5.0000
25.0000 18.0000
85.0000 72.0000
类似于 的解决方案,但推广到任意数量的维度(=列)。 Thomas 的回答要求 A
和 B
正好有 2 列才能使用复数表示。在这里,我们使用第 3 个数组维度而不是复数值:
n = 3; % number of spatial dimensions for computing the L2 norm
A = 10*rand(20,n);
B = 10*rand(4,n);
C = sum((reshape(A,[],1,n) - reshape(B,1,[],n)).^2,3)
首先我们重塑 A
,使其行仍然是行,但其列沿第 3 个数组维度排列。我们类似地重塑 B
,但它的行变成列,它的列移动到第 3 个维度。前两个维度的排列与输出 C
.
的排列相匹配
接下来我们求差(使用隐式单例扩展,对于旧版本的 MATLAB,您需要使用 bsxfun
)、平方和沿第 3 个维度求和。
在 matlab 中给定一个矩阵 A
:
3 1
4 5
7 8
和另一个矩阵B
可以作为一些参考点(每行是参考点,要与A
的每一行进行比较),
1 1
1 2
我需要计算一个矩阵 C
,这样
4 5
25 18
85 72
其中 C
的每一行是 A
的每一行与 B
的行之间的差异(平方 L2 范数)。在 MATLAB 中执行此操作的一种可能方法是首先创建一个零矩阵 C
、C = zeros(5,2)
,然后使用双 for 循环填充适当的值。在 MATLAB 中还有其他 efficient/simpler 方法吗?
找到下面的代码片段
C = zeros(5,2)
for i = 1:rows
for j = 1:rows2
C(i,j) = (norm(A(i,:)-B(j,:)))^2
end
end
也许你可以像下面那样尝试bsxfun
A = [3,1; 4,5;7,8];
B = [1,1;1,2];
% you can first rewrite A and B in complex coordinates to simplify the computation, and then compute difference of two complex values
C = abs(bsxfun(@minus,A*[1;1j],transpose(B*[1;1j]))).^2;
你会得到
C =
4.0000 5.0000
25.0000 18.0000
85.0000 72.0000
类似于 A
和 B
正好有 2 列才能使用复数表示。在这里,我们使用第 3 个数组维度而不是复数值:
n = 3; % number of spatial dimensions for computing the L2 norm
A = 10*rand(20,n);
B = 10*rand(4,n);
C = sum((reshape(A,[],1,n) - reshape(B,1,[],n)).^2,3)
首先我们重塑 A
,使其行仍然是行,但其列沿第 3 个数组维度排列。我们类似地重塑 B
,但它的行变成列,它的列移动到第 3 个维度。前两个维度的排列与输出 C
.
接下来我们求差(使用隐式单例扩展,对于旧版本的 MATLAB,您需要使用 bsxfun
)、平方和沿第 3 个维度求和。