在一个命令中添加三个或更多矩阵
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
例如,在 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