对角线中的矩阵求和 - MatLab

时间:2015-03-27 17:33:10

标签: matlab matrix

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

A = [A11 A12; A21 A22]

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

感谢。

2 个答案:

答案 0 :(得分:2)

这只是一些矩阵索引:

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

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

答案 1 :(得分:1)

鉴于

  • 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 = 4& K = 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