在矩阵中,我们如何能够将部分元素相加?以一种可以划分为更小的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个席位的结果。
答案 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)'