从 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, reshape
到 2D
-
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
假设我有两个矩阵 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, reshape
到 2D
-
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