【问题标题】:Adding three or more matrices in one command在一个命令中添加三个或更多矩阵
【发布时间】:2018-11-04 07:11:45
【问题描述】:

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

【问题讨论】:

    标签: matlab matrix sum vectorization binary-operators


    【解决方案1】:

    如果元胞数组中的所有矩阵都具有相同的大小,那么您可以 concatenate 将它们中的每一个放在 3D 数组的单独切片中,然后 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
    

    【讨论】:

    • 谢谢!我在另一个论坛上遇到了这个答案,它适用于密集矩阵,但不适用于稀疏矩阵——你不能连接维度 > 2 的稀疏矩阵。如果必须,我会使用循环,但我倾向于尝试除非绝对必要,否则避免使用它们!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-07
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多