How to split a matrix in "submatrices"?

How can i divide a matrix into submatrices of given dimensions in automatic way?
example:
data=reshape(1:88,11,8); %create a matrix
[mpixel,npixel]=size(data); %matrix's dimensions
m=2; %rows of the submatrix
n=3; %columns of the submatrix
v_w=floor(mpixel/m); %number of "vertical" submatrices
h_w=floor(npixel/n); %number of "horizontal" submatrices
cropdata=data(1:v_w*m,1:h_w*n);%crop matrix that can be diveded using that mxn submatrices
%
newdata=mat2cell(cropdata,[m m m m m],[n n]);
This code work but if I have bigger matrix I must continue to explicit [m m m...],[n n n...] in the last command and it's crazy. How can i use the command mat2cell with a smarter way?

4 个评论

Why do you want to break your data up rather than just indexing into it and leaving it in one neat array?
Cause I need to have all the small matrices for other processing, in authomatic way. I can't call each time a part of the original matrix. The problem is a little bit more complicated then that in the example.
Why not just use blockproc() and let that handle the getting of the submatrices?
I see the documentation of blockproc(), it processes block by block but at the end the output it's the input image/matrix.

请先登录,再进行评论。

 采纳的回答

As others have said, there may be no need to explicitly split the matrix, but if you must what is wrong with:
newdata = mat2cell(cropdata, repelem(m, v_w), repelem(n, h_w));

1 个评论

Thanks! It works. Meanwhile i have found a different way leaving, as someone said, the original matrix and indexing.

请先登录,再进行评论。

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Matrix Indexing 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by