首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >矩阵积的bsxfun

矩阵积的bsxfun
EN

Stack Overflow用户
提问于 2014-01-13 10:20:48
回答 3查看 1.2K关注 0票数 5

我需要用n个矩阵乘一个矩阵A,然后得到n矩阵。例如,将2x2矩阵与叠加为2x2x3 Matlab数组的3个2x2矩阵相乘。bsxfun是我在这种情况下通常使用的,但它只适用于按元素划分的操作。我可以做这样的事情:

代码语言:javascript
复制
blkdiag(a, a, a) * blkdiag(b(:,:,1), b(:,:,2), b(:,:,3))

但是我需要一个任意的n的解决方案-?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-13 12:30:08

你可以reshape的堆叠矩阵。假设您有一个kby-k矩阵a和一个m k-by-k矩阵sb,并且您想要ii = 1..m的产品a*sb(:,:,ii)。你所需要的就是

代码语言:javascript
复制
sza = size(a);
b = reshape( b, sza(2), [] ); % concatenate all matrices aloong the second dim
res = a * b; 
res = reshape( res, sza(1), [], size(sb,3) ); % stack back to 3d
票数 7
EN

Stack Overflow用户

发布于 2014-01-13 11:46:42

您的解决方案可以使用从单元格数组获得的逗号分隔列表来适应任意大小:

代码语言:javascript
复制
[k m n] = size(B);
Acell = mat2cell(repmat(A,[1 1 n]),k,m,ones(1,n));
Bcell = mat2cell(B,k,m,ones(1,n));
blkdiag(Acell{:}) * blkdiag(Bcell{:});

然后,您可以使用这个答案将这些块堆叠在3D数组上,并且只保留相关的块。

但在这种情况下,一个好的旧循环可能更快:

代码语言:javascript
复制
C = NaN(size(B));
for nn = 1:n
    C(:,:,nn) = A * B(:,:,nn);
end
票数 3
EN

Stack Overflow用户

发布于 2020-05-11 01:55:02

对于要执行矩阵乘法的大量矩阵和/或向量,速度可能开始成为一个问题。为了避免重新发明轮子,您可以简单地编译并使用以下快速MEX代码:MTIMESX - Mathworks。根据经验,MATLAB在对大量操作执行循环时效率很低,而这些操作看起来应该是可向量化的;我想不出一种简单的方法来概括Shai对这种情况的回答。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21088832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档