MATLAB: Reshape many submatrices to form a new matrix

reshapesubmatrices

I have got a 450 by 450 matrix. I need to reshape every 30 by 30 submatrix to become a 1 by 900 matrix. Therefore, there are 225 1 by 900 matrices. Then I have to group those 225 matrices to become a 225 by 900 matrix. At this moment I have got something like this to extract every 30 by 30 matrices.
for i=1:30:450
for j =1:30:450
G= m((i:i+29),(j:j+29));
end
end
But I have no ideas how to reshape those matrices to become 1 by 900 matrices to form a 225 by 900 matrix. Hope somebody can help, thank you.

Best Answer

A=rand(450);
ii1=1:30:450;
ii2=1:30:450;
[x,y]=meshgrid(ii1,ii2);
B=arrayfun(@(ii,jj) reshape(A(ii:ii+29,jj:jj+29),1,[]),x,y,'un',0)
out=cell2mat(B(:))
another way is to switch x and y
B=arrayfun(@(ii,jj) reshape(A(ii:ii+29,jj:jj+29),1,[]),y,x,'un',0)
Related Question