矩阵行与另一个矩阵列的快速乘法方法

3
我有两个矩阵,希望能将第一个矩阵的每一列与第二个矩阵的每一行相乘,以获得一个新的矩阵,下面是示例:
for j=1:size(A,2)
    c(:,:,j) = A(:,j)*B(:,j)'  ;
end

AB具有相同的大小。

是否有一种快速的方法来实现这个?


ABC 的大小是多少? - Divakar
请逐个问题提问。我已删除了您的第二个问题;如果相关,请随时将其作为新问题发布。 - Jean-François Corbett
@Jean-FrançoisCorbett,我能够编辑我的第一个问题来与我的第二个问题相符吗? - shaloo shaloo
@Jean-FrançoisCorbett 我的第二个问题是我第一个问题的一般形式,我认为仅仅问一个更一般的问题是不合适的。我该怎么办?作为一个新问题来问吗? - shaloo shaloo
只需提出一个新问题。这个问题已经关闭,不会得到任何关注。你应该参考这个问题,并说明你的新问题与它有何不同。 - Jean-François Corbett
1个回答

3

使用 bsxfun 让事情变得简单:

C = bsxfun(@times, permute(A, [1 3 2]), permute(B, [3 1 2]));

应该对此很好! :) - Divakar
1
不错。毫不意外的是,对于大矩阵(在我的系统上大于约200×200),简单的“for”循环更快。这可能与缓存有关。 - horchler
1
@horchler 是的。普通循环不像以前那么慢,这有点可惜。这减少了Matlab编程的一部分乐趣 :-) - Luis Mendo
@LuisMendo 的问题在于矩阵乘法太快了,导致使用bsxfun(@times时...与朴素的for-loop相比,“不太好”。不过,与 bsxfun 结合的其他操作表现好得多。 - Divakar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接