在matlab中以相等的间隔添加行

时间:2015-05-17 15:39:56

标签: matlab matrix

我有一个6954乘222的矩阵,我想总计每122行得到57乘222矩阵。如果有人有解决方案,请帮助我。

4 个答案:

答案 0 :(得分:3)

使用permutereshape和当然sum

rowstosum = 122;
out = permute(sum(permute(reshape(A.',size(A,2),rowstosum,[]),[2 1 3])),[3 2 1])

抽样检查(对于带有2 rowstosum的10x3矩阵)

>> A

A =

 8     8     2
 2     9     5
 9     8     2
10     4     1
 6     6     9
 9     1     6
 6     2    10
 2     2     7
 2     7     6
 5     5     9

>> out

out =

10    17     7
19    12     3
15     7    15
 8     4    17
 7    12    15

答案 1 :(得分:3)

这应该是一种有效的方法,因为它使用轻量级reshape& squeeze以及强制性sum -

cutlen = 122 %// Cut after this many number of rows, for summing purposes
out = squeeze(sum(reshape(A,cutlen,[],size(A,2)),1));

答案 2 :(得分:2)

这也应该非常有效:

A = ... %// input array

iL = 122;   %// interval length
y = filter(ones(1,iL),1,A);
y = y(iL:iL:end,:);

conv / conv2不同,filter函数还允许2D数据的一维卷积。但同样Divakar's approach似乎是最快的。

这种方法看起来非常接近:

out = reshape(sum(reshape(A,iL,[])),[],size(A,2));

答案 3 :(得分:1)

sparse函数可用于累积行。

A表示矩阵,n表示要求和的行数,B表示结果。然后

r = repmat(ceil(1/n:1/n:size(A,1)/n).',1,size(A,2)); %'
c = repmat(1:size(A,2),size(A,1),1);
B = full(sparse(r,c,A));