在一个命令中添加三个或更多矩阵

时间:2018-05-25 00:12:15

标签: matlab matrix sum vectorization binary-operators

例如,在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中不起作用。

1 个答案:

答案 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