我在36x256x2232
创建的Matlab中有一个M = ones(36,256,2232)
3d矩阵,我想通过将行的总和减少3来减小矩阵的大小。结果矩阵应该为12x256x2232
并且每个单元格的值应为3。
我尝试使用reshape
和sum
函数,但得到了1x256x2232矩阵。
不使用for-loop
怎么办?
答案 0 :(得分:1)
这应该做到:
M = ones(36,256,2232)
reduced = reshape(sum(reshape(M, 3,[], 256,2232), 1),[], 256, 2232);
reshape
制作一个具有给定间隔的4d矩阵sum
减少它您还可以使用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);