在matlab中对该矩阵的不同部分中的矩阵求和

时间:2014-07-02 12:23:10

标签: arrays matlab matrix

在矩阵中,我们如何能够将部分元素相加?以一种可以划分为更小的m乘n矩阵的方式考虑主矩阵。然后我想将每个m乘以n矩阵的整个元素加在一起,并将数字代替m乘以n矩阵 例如,考虑以下矩阵,我想对每四个元素求和并创建另一个矩阵:

A = [1  2  3  4
     5  6  7  8
     9  10 11 12
     13 14 15 16];

总结之后我想要:

B = [14 22
     46 54];

我在这个例子中将4个元素作为2乘2的矩阵求和,然后例如在新矩阵的第一个元素中求和1,2,5和6个席位的结果。

2 个答案:

答案 0 :(得分:3)

m = 2; %// number of rows per block
n = 2; %// number of columns per block

您可以使用blockproc(来自图像处理工具箱)进行总结,这非常适合此任务:

B = blockproc(A, [m n], @(x) sum(x.data(:)));

或者,如果您构建适当的索引,则可以使用accumarray

[ii jj] = ndgrid(1:size(A,1), 1:size(A,2));
B = accumarray([ceil(ii(:)/n) ceil(jj(:)/m)], A(:))

答案 1 :(得分:2)

一种方法 -

B = squeeze(sum(reshape(sum(reshape(A,m,[])),size(A,1)/m,n,[]),2))

另一种方法,如果你想避免squeeze,有时会更慢 -

B = reshape(sum(reshape(reshape(sum(reshape(A,m,[])),size(A,1)/m,[])',n,[])),[],size(A,1)/m)'