0

在 Matlab 中,我需要将 M x N 和 M x kN 维度的两个矩阵相乘。换句话说,它们的高度相同,但第二个矩阵宽 k 倍,因此矩阵 A 中的每个元素必须乘以矩阵 B 中行的 k 个元素。

解释起来有点棘手,如果不清楚,我很抱歉。显然我知道 .* 但我不知道如何让它工作。

A = [2 3;...
    4 5]
B = [9 8 7 6;...
    8 7 6 5]

我需要乘 |2*9, 2*8, 3*7, 3*6| 4*8、4*7、5*6、5*5| 得到结果

C = [18 16 21 18;...
    32 28 30 25]

这可以在不使用繁琐的 for 循环的情况下有效地完成吗?多谢你们!

4

2 回答 2

2

你可以做这样的事情,这似乎是你想要的,并提供与你发布的结果相同的结果。

A = [2 3;
     4 5];
B = [9 8 7 6;
     8 7 6 5];
A = imresize(A,size(B),'nearest');
C = A.*B

不过,这仅在您提出的特定情况下才真正起作用。它还假设您拥有图像处理工具箱

于 2013-07-22T14:55:03.730 回答
1

您可以置换、重塑、逐元素相乘、再次置换并重新整形:

X = bsxfun(@times, A, reshape(B.', size(A,1), size(A,2), []));  %'// elementwise
C = reshape(permute(X, [1 3 2]), size(B));
于 2013-07-22T15:05:57.913 回答