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

Adding three or more matrices in one command

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

如果元胞数组中的所有矩阵都具有相同的大小,那么您可以 concatenate each of them in a separate slice of a 3D array and then sum 沿第 3 个维度,即

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