是否有任何简单的命令/代码来对包含矩阵的对角线中的块子矩阵求和? 一个例子:
A = [A11 A12; A21 A22]
我想获得A11 + A22,其中Aij是NxK块矩阵。
感谢。
答案 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)
鉴于
接下来列出的代码将是实现问题中设定的目标的通用代码 -
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 = 4
,N = 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