【问题标题】:summing over a matrix in different parts of that matrix in matlab在matlab中对该矩阵不同部分的矩阵求和
【发布时间】:2014-08-23 05:40:36
【问题描述】:

在矩阵中,我们如何才能逐部分求和?以可以划分为较小的 m × n 矩阵的方式考虑主矩阵。然后我想将每个 m x n 矩阵的所有元素加在一起,然后将数字而不是 m x 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 x 2 的矩阵,然后例如在新矩阵的第一个元素中将 1、2、5 和 6 个席位相加的结果。

【问题讨论】:

  • 考虑主矩阵,可以将其划分为更小的 m × n 矩阵。然后我想将每个 m x n 矩阵的所有元素相加,然后将数字而不是 m x n 矩阵放在一起。

标签: arrays matlab matrix


【解决方案1】:

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

【讨论】:

    【解决方案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)'
    

    【讨论】:

      猜你喜欢
      • 2015-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      相关资源
      最近更新 更多