我有一个cell(1, n)被调用的单元格数组A,每个单元格条目包含一个矩阵mxn.因此,实际上,我的单元格数组包含n大小的矩阵mxn.
然后我调用了另一个单元数组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当矩阵具有相同数量的行和列时,只能乘以单个单元格.
现在,我可以通过使用各种循环,或通过调用cell2mat和等来执行此操作mat2cell.我也可以将所有内容存储为矩阵阵列而不是使用单元格......但是 - 我更喜欢使用单元格.
所以 - 我的问题是:有没有一个很好的方法只使用这个cellfun?我已经尝试了各种参数输入组合 - 但到目前为止还没有运气.
要使用 执行此操作cellfun,只需定义您自己的匿名函数:
C = cellfun(@(a,b) a*b, A, B, 'UniformOutput', 0);
Run Code Online (Sandbox Code Playgroud)
现在,当您提出问题时,您不能将 A*B 相乘,因为内部尺寸不一致。相反,我用 B*A 进行了测试,其中尺寸确实一致:p=1、m=3、n=3。
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);
Run Code Online (Sandbox Code Playgroud)
求和是通过连接C超过第三维的每个数组然后对其求和来完成的。