【问题标题】:Summing Matrices in the Diagonal - MatLab对角线求和矩阵 - MatLab
【发布时间】:2015-03-27 17:33:10
【问题描述】:

是否有任何简单的命令/代码可以对包含矩阵的对角线中的块子矩阵求和? 一个例子:

A = [A11 A12;A21 A22]

我想得到 A11+A22,其中 Aij 是 NxK 块矩阵。

谢谢。

【问题讨论】:

标签: matlab matrix


【解决方案1】:

这只是一些矩阵索引:

N=size(A,1)/2;
K=size(A,2)/2;
E=A(1:N,1:K)+A(N+1:end,K+1:end)

我建议阅读有关矩阵索引和colon 运算符的文档页面。

【讨论】:

  • 对于任意大小的矩阵(所有块子矩阵的大小相同)是否有单线。
  • @user191919:对于通用版本,请查看 thewaywewalk 提供给您的链接。
【解决方案2】:

给定

  • D 作为对角矩阵的数量
  • N 和 K 作为每个块的大小参数

接下来列出的代码将是实现问题中设定目标的通用代码 -

start_block = bsxfun(@plus,[1:N]',[0:K-1]*D*N)     %//'# Starting block indices
blks = A(bsxfun(@plus,start_block(:),[0:D-1]*(D*N*K + N)))%// Blocks in columns
out = reshape(sum(blks,2),N,K) %// Sum blks across columns and reshape into a 
                               %// N x K array for the final output

使用D = 4N = 4K = 3 运行示例-

A =
     6     9     9     2     7     6     2     9     1     1     4     2
     4     5     5     3     7     4     9     8     8     6     6     2
     3     3     7     1     6     9     3     7     9     9     7     3
     5     7     2     9     4     3     9     8     1     4     6     7
     4     7     9     6     4     6     3     4     9     4     5     8
     4     7     5     9     8     6     4     6     1     9     6     7
     6     7     7     2     3     4     1     6     7     9     5     1
     7     1     1     9     8     2     6     5     8     7     1     8
     4     7     8     8     8     1     2     3     5     9     7     9
     4     5     7     6     8     4     1     3     8     7     9     7
     2     2     2     4     5     2     7     5     9     4     4     1
     1     1     5     3     6     7     4     3     6     6     9     4
     3     8     3     7     9     4     6     8     2     3     4     7
     3     2     5     3     4     8     4     9     2     3     8     7
     6     2     4     1     1     7     6     1     2     7     5     3
     9     6     4     7     8     6     1     5     1     5     4     3
blks =
     6     6     2     3
     4     9     1     3
     3     2     7     7
     5     9     4     5
     9     4     3     4
     5     8     3     8
     3     3     5     5
     7     8     3     4
     9     6     5     7
     5     6     8     7
     7     4     9     3
     2     2     6     3
out =
    17    20    27
    17    24    26
    19    16    23
    23    22    13

验证样本运行的输出 -

>> A(1:4,1:3) + A(5:8,4:6) + A(9:12,7:9) + A(13:16,10:12)
ans =
    17    20    27
    17    24    26
    19    16    23
    23    22    13

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-15
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多