首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单元阵列中的乘法矩阵

单元阵列中的乘法矩阵
EN

Stack Overflow用户
提问于 2012-12-01 07:59:34
回答 2查看 5.8K关注 0票数 6

我有一个名为Acell(1, n)单元格数组,每个单元格条目都包含一个mxn矩阵。因此,实际上,我的单元格数组包含大小为mxnn矩阵。

然后我有了另一个名为B的单元数组,其中存储了n pxm矩阵。

我需要做的是将两者相乘,例如:A[1] * B[1]A[2] * B[2],...,A[n] * B[n]。然后,我需要将结果存储为它们自己的单个矩阵,并对它们求和。

矩阵对于乘法是保角的,但是因为单元阵列B比单元阵列A包含的行数少,所以当我使用cellfun(@times A, B, 'UniformOutput', true)时,我得到了一个unequal matrices错误。

这似乎表明,当矩阵的行数和列数相等时,cellfun只能将单个单元格相乘。

现在,我可以通过使用各种循环,或者通过调用cell2matmat2cell等方法来执行此操作。我也可以将所有内容存储为矩阵数组,而不是使用单元格...但是-我更喜欢使用细胞。

所以-我的问题是:有没有一个只使用cellfun就能做到这一点的好方法?我已经尝试过各种不同的参数输入组合--但到目前为止还没有成功。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-01 08:24:26

要使用cellfun做到这一点,只需定义您自己的匿名函数:

代码语言:javascript
复制
C = cellfun(@(a,b) a*b, A, B, 'UniformOutput', 0);

现在,正如你提出的问题,你不能将A*B相乘,因为内部维度不一致。相反,我使用B*A进行了测试,其中维度确实一致: p=1、m=3、n=3。

代码语言:javascript
复制
A = {eye(3), rand(3), magic(3)};
B = {[1 2 3], [3 5 1], [7 8 8]};

C = cellfun(@(a,b) b*a, A, B, 'UniformOutput', 0);

Cmat = cat(3, C{:});
S = sum(Cmat, 3);

求和是通过连接第三维上的每个C数组,然后对其求和来完成的。

票数 2
EN

Stack Overflow用户

发布于 2012-12-01 17:32:51

是的,参数需要具有相同的大小。来自help cellfun

A= cellfun(FUN,B,C,...)使用单元格数组B,C,...的单元格内容计算有趣。作为输入参数。A的第(I,J,...)个元素等于FUN(B{I,J,...},C{I,J,...},...)。B,C,...都必须具有相同的大小。

因此,在调用cellfun之前,要么使用循环,要么从包含大量元素的单元格中删除多余的元素

代码语言:javascript
复制
% assuming B has more elements than A
B(numel(A)+1:end) = [];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13654910

复制
相关文章

相似问题

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