[英]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.