adding matrices inside a big matrix
3 ビュー (過去 30 日間)
古いコメントを表示
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
0 件のコメント
採用された回答
Sean de Wolski
2011 年 11 月 15 日
And this fun answer:
sum4x4 = reshape(sum(reshape(reshape(sum(reshape(B,4,[])),size(B,1)/4,[])',4,[])),size(B)./4);
sum4x4 = reshape(sum4x4,size(sum4x4,2),size(sum4x4,1))'
where B is your matrix.
6 件のコメント
Sean de Wolski
2011 年 11 月 16 日
Good catch!
Just add this line will do the same thing.
sum4x4 = reshape(sum4x4,size(sum4x4,2),size(sum4x4,1))'
その他の回答 (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 件のコメント
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(:)));
0 件のコメント
参考
カテゴリ
Help Center および 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!