繁体   English   中英

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

[英]summing over a matrix in different parts of that matrix in matlab

在矩阵中,我们如何将元素的一部分相加? 考虑主矩阵的方式可以将其分成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个座位求和的结果。

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(:))

一种方法-

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)'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM