Arrays 将矩阵划分为块矩阵

Arrays 将矩阵划分为块矩阵,arrays,matlab,matrix,multidimensional-array,submatrix,Arrays,Matlab,Matrix,Multidimensional Array,Submatrix,我想把一个图像数据分成块,例如,如果我有一个4*4的X矩阵,我想得到一个2*2*2*2的矩阵M,其中M(1,1,:,:)=X(1:2,1:2)和M(1,2,:,:,:)=X(1:2,3:4)等等 我找到了一种使用mat2cell将其划分为单元数组的方法,但是matlab中似乎不太支持单元数组,我搜索并询问,这样做只是为了做一些可以用普通矩阵轻松完成的事情(我得到的答案建议根本不使用单元数组) 我搜索了整个网络,得到了很多结果,它们要么解决了一个特定的问题(比如找到一个方程的解,我不想在这里),要

我想把一个图像数据分成块,例如,如果我有一个4*4的X矩阵,我想得到一个2*2*2*2的矩阵M,其中M(1,1,:,:)=X(1:2,1:2)和M(1,2,:,:,:)=X(1:2,3:4)等等

我找到了一种使用mat2cell将其划分为单元数组的方法,但是matlab中似乎不太支持单元数组,我搜索并询问,这样做只是为了做一些可以用普通矩阵轻松完成的事情(我得到的答案建议根本不使用单元数组)

我搜索了整个网络,得到了很多结果,它们要么解决了一个特定的问题(比如找到一个方程的解,我不想在这里),要么最终得到了mat2cell

我发现的最接近的结果是使用整形,我尝试了整形(X,[2]),得到了C=2*2*2*2矩阵,但C(1,1,:,:)似乎是X的第一行,而不是第一个块,我不知道接下来要做什么

有人建议使用permute(C,[1234]),但我还是没有得到我想要的结果

我还是matlab的初学者,所以如果我的问题很简单,请原谅我,我也不想要循环,我想要向量代码,那么重塑后下一步该怎么做

编辑 我尝试了重复问题的答案,但仍然没有得到我想要的结果,我尝试了以下方法:

A=ones(40,40);
A(1:10,1:10)=32*ones(10,10);
A(11:20,1:10)=zeros(10,10);    
T = permute(reshape(A, size(A, 1), 10, []), [2 1 3]);  
T = permute(reshape(T, 10, 10, [], size(T, 3)), [2 1 3 4]); 
T是10*10*4*4,正好是我想要的大小(40*40变成一个4*4的子矩阵),但是值是错误的,
T(1,1,:,:)~=a(1:4,1:4)


我做错了什么?

对于初始情况
(4x4到2x2x2)
使用

M= permute(reshape(X',[2,2,2,2]),[4,2,3,1]);
对于
size(X)=a X b)
size(M)=c X d X e X f
的一般情况,对于任何自然数
n
,使用

M= permute(reshape(X',[c,d,e,f]),[4,2,3,1]);

具体而言,参见答案的第二种变体,其中
m=2;n=2在你的例子中嗯,是的,我可以看到,尽管我不知道这是重复的,除非我因为题目读了答案。你确定你不需要-
M(:,,:,1,1)=X(1:2,1:2),M(:,:,:,2,1)=X(3:4,1:2),M(:,:,2,1)=X(1:2,3:4)和M(:,,,,,,,,,,,,,,,,,,,,2)=X(3:4)
而不是你写的?@Nishant不,我不需要,我想要
M(1,1,:,:)
而不是
M(:,:,1,1)
@niceman那么你可能需要
排列A.Donda回答的结果