2014-11-24 62 views
3

我有两个矩阵,我想将第一个矩阵的每一列与第二个矩阵的一行相乘以获得矩阵,如下所示:矩阵行与另一个列的乘法的快速方式

for j=1:size(A,2) 
    c(:,:,j) = A(:,j)*B(:,j)' ; 
end 

AB具有相同的尺寸。

有没有一种快速的方法来做到这一点?

+0

A'''B'的尺寸,'C'? – Divakar 2014-11-24 17:27:13

+0

每个问题请提出一个问题。我删除了你的第二个问题;如果相关,随意发布它作为一个新问题。 – 2014-11-25 08:31:10

+0

@ Jean-FrançoisCorbett我可以编辑我的第一个问题作为我的第二个问题吗? – 2014-11-25 08:34:58

回答

3

易与bsxfun

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

应该对此好! :) – Divakar 2014-11-24 17:31:01

+1

不错。不出所料,简单的'for'循环对于大型矩阵来说更快(在我的系统上大于200-by-200)。可能与缓存有关。 – horchler 2014-11-24 17:51:35

+1

@horchler是的。普通循环不像以前那么慢,这是一个“可惜”。这将部分乐趣移除到Matlab的编程上:-) – 2014-11-24 18:21:59