首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对角- MatLab中矩阵的求和

对角- MatLab中矩阵的求和
EN

Stack Overflow用户
提问于 2015-03-27 17:33:10
回答 2查看 201关注 0票数 2

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

A= A11 A12;A21 A22

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

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-29 09:47:15

给定的

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

下面列出的代码将是一个通用代码,以实现问题中规定的目标-

代码语言:javascript
复制
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进行示例运行

代码语言:javascript
复制
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

验证样本运行的输出-

代码语言:javascript
复制
>> 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
票数 1
EN

Stack Overflow用户

发布于 2015-03-27 17:42:22

这只是一些矩阵索引:

代码语言:javascript
复制
N=size(A,1)/2;
K=size(A,2)/2;
E=A(1:N,1:K)+A(N+1:end,K+1:end)

我建议阅读有关矩阵索引和colon操作符的文档页。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29306737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档