如何在Matlab中按间隔求和3d矩阵行?

时间:2019-01-28 15:43:03

标签: matlab matrix

我在36x256x2232创建的Matlab中有一个M = ones(36,256,2232) 3d矩阵,我想通过将行的总和减少3来减小矩阵的大小。结果矩阵应该为12x256x2232并且每个单元格的值应为3。

我尝试使用reshapesum函数,但得到了1x256x2232矩阵。

不使用for-loop怎么办?

2 个答案:

答案 0 :(得分:1)

这应该做到:

M = ones(36,256,2232)
reduced = reshape(sum(reshape(M, 3,[], 256,2232), 1),[], 256, 2232);
  • reshape制作一个具有给定间隔的4d矩阵
  • sum减少它
  • 第二次重塑将其再次转换为3d

您还可以使用squeeze,它删除单例尺寸:

reduced = squeeze(sum(reshape(M, 3,[], 256,2232), 1));

答案 1 :(得分:0)

您可以使用新的splitapply函数(类似于accumarray,但可以处理多维数据)。即使行数不是组大小的倍数,此方法也可以使用:

M = ones(4,5,2); % example data
n = 3; % group size
result = splitapply(@(x)sum(x,1), M, floor((0:size(M,1)-1).'/n)+1);