从 B 的每个元素中减去 A 的每个元素

Subtracting each element of A from every element of B

假设我有两个矩阵 A 和 B,其中: A 为 100x2 B 是 5x2

我想用 B 中的每个元素减去 A 中的每个元素。我可以 运行 以下内容来实现我想要的:

for j = 1:5
    D = A - B(j, :);
    C = [C(:,:); D(:,:)];
end;

然而,这对于巨大的矩阵来说很慢。我对它进行矢量化的所有尝试都遇到了 "nonconformant arguments" 错误

j = 1:5;
C = A - B(j, :);

如何压缩上述 for 循环以利用矢量化?

类似的内容可能会对您有所帮助:

arrayfun(@(x) x*B, A, 'Uni', 0)

Permute axes, use bsxfun for broadcasted subtractions, reshape2D -

reshape(bsxfun(@minus, permute(A,[1,3,2]), permute(B,[3,1,2])),[],2)

implicit-broadcasting/implicit-expansion-

reshape(permute(A,[1,3,2]) - permute(B,[3,1,2]),[],2)

样本运行-

>> A
A =
     1     2
     4     8
>> B
B =
     3     2
     5     6

% Original loopy code
>> C = [];  
for j = 1:size(B,1)
    D = bsxfun(@minus, A, B(j, :));
    C = [C(:,:); D(:,:)];
end;
>> C
C =
    -2     0
     1     6
    -4    -4
    -1     2

% Proposed code
>> reshape(bsxfun(@minus, permute(A,[1,3,2]), permute(B,[3,1,2])),[],2)
ans =
    -2     0
     1     6
    -4    -4
    -1     2