我有一个6954乘222的矩阵,我想总计每122行得到57乘222矩阵。如果有人有解决方案,请帮助我。
答案 0 :(得分:3)
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));