例如,在Octave中,我可以执行以下操作:
A = randn(2);
B = randn(2);
C = randn(2);
plus(A, B, C)
然而,这在MATLAB中不起作用,因为MATLAB中的plus函数只允许两个输入参数。
对于上下文,我有一个充满大型稀疏矩阵的单元格数组,我需要将它们全部加在一起。我正在寻找一种有效的方法来做到这一点。例如,在Octave中,我会执行以下操作:
D = {A, B, C};
plus(D{:})
但由于上述原因,这在MATLAB中不起作用。
答案 0 :(得分:2)
如果单元格阵列中的所有矩阵具有相同的大小,那么您可以在3D阵列的单独切片中concatenate每个矩阵,然后沿第3维度sum,即
。sum(cat(3,D{:}),3)
如果您的单元格数组是标量和矩阵的组合,或者您使用plus
进行隐式扩展,则无效。
如果单元阵列具有不同大小的矩阵组合,那么只需使用一个循环。在较新版本的MATLAB中,循环得到了显着改善。
req = 0;
for k = 1:numel(D)
req = req + D{k}; %or bsxfun(@plus, req, D{k}) for < R2016b
end