Create new smaller Matrix by summing every n-rows in old Matrix (without loops)
1 次查看(过去 30 天)
显示 更早的评论
I've a Matrix like A =
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
8 8 8
9 9 9
I want this 9x3 Matrix to become a (9/n)x3 Matrix (n=3) where every third row is added up. The result would then be:
B =
12 12 12 %because 1+4+7
15 15 15 %because 2+5+8
18 18 18 %because 3+6+9
Is there a way e.g. to use sum() or so? I justed a loop over all rows but my actual Matrix contains a lot of data which is why that would take too long...
Thanks a lot!
采纳的回答
Andrei Bobrov
2013-12-17
编辑:Andrei Bobrov
2013-12-17
s1 = size(A);
s2 = [3 3]; % size of the matrix- result
ii = rem((1:s1(1))'-1,s2(1))+1;
[i1,i2] = ndgrid(ii,1:s1(2));
B = accumarray([i1(:),i2(:)],A(:));
or just:
B = sum(reshape(A',size(A,2),3,[]),3)';
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!