adding matrices inside a big matrix
이전 댓글 표시
Hello everybody,
I am wandering if there is a way for not using loops to add many small matrices inside a big matrix. For example I have a big 40000x240000 matrix and I want to add all the numbers of 4x4 matrices inside that matrix, resulting in a 10000x60000 matrix.
thank you all for your answers
채택된 답변
추가 답변 (3개)
Fangjun Jiang
2011년 11월 15일
Because the size of your matrix, you might want to re-use the matrix so replace the variable "e" and "f" with "d".
d=rand(40,24);
[M,N]=size(d);
e=mat2cell(d,4*ones(M/4,1),4*ones(N/4,1));
f=cellfun(@(x) sum(x(:)),e);
Sean de Wolski
2011년 11월 15일
How about blkproc if you have the Image Processing Toolbox (or blockproc in newer versions).
blkproc(magic(16),[4 4], @(x)(sum(x(:))))
I'm surprised conversion to cell is faster than a well done for-loop. Perhaps you could post what you had for the nested for-loops?
댓글 수: 4
j_solar
2011년 11월 15일
j_solar
2011년 11월 15일
Sean de Wolski
2011년 11월 15일
in blkproc, did you change magic(16) to 'a'? the magic(16) was for demo purposes only.
Sean de Wolski
2011년 11월 15일
Your for-loop could be sped up a little by building the j-index vectors outside of the k for-loop. Overall it's good though!
Andrei Bobrov
2011년 11월 17일
e.g.
A = randi(25,12,16);
m = 4;
n = 4;
[M,N] = size(A);
out = reshape(sum(sum(reshape(A.',n,N/n,m,[]),3)),n,[])';
or
out2 = reshape(sum(sum(reshape(A,m,M/m,n,[]),3)),[],n);
or2
out3 = blockproc(A,[m n],@(block_struct)sum(block_struct.data(:)));
카테고리
도움말 센터 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!