Matlab 将大矩阵拆分为新的小矩阵

Matlab 将大矩阵拆分为新的小矩阵,matlab,matrix,Matlab,Matrix,如果我有这样一个矩阵: x = rand(256,144160); 如何将其拆分为更小的矩阵,即256 x 901 我尝试了mat2cell(x,256901),但出现了以下错误: 输入参数,D1到D2,必须与输入矩阵大小的每个维度相加,[256 144160]。 这是因为您没有正确使用mat2cell。您需要做的是指定如何分割每个维度。第一个维度很好,因为您希望每个矩阵有256行,但是对于第二个维度,您需要144160/901=160矩阵,每个矩阵有901列 因此,您需要为每个元素指定一个包

如果我有这样一个矩阵:

x = rand(256,144160);
如何将其拆分为更小的矩阵,即
256 x 901

我尝试了
mat2cell(x,256901)
,但出现了以下错误:

输入参数,
D1
D2
,必须与输入矩阵大小的每个维度相加,
[256 144160]。


这是因为您没有正确使用
mat2cell
。您需要做的是指定如何分割每个维度。第一个维度很好,因为您希望每个矩阵有256行,但是对于第二个维度,您需要
144160/901=160
矩阵,每个矩阵有901列

因此,您需要为每个元素指定一个包含160个值和901个值的向量:

y = mat2cell(x, 256, 901*ones(1,160));
这告诉
mat2cell
您需要901个矩阵,其中每个矩阵有160列,所有矩阵都有256行。这就揭示了错误消息的含义。它告诉你,你想要分割这个矩阵的方式,你要分割的每个维度必须加起来等于原始矩阵的大小。第一个维度设置为256,因此很明显,您希望所有矩阵都有256行。对于这些列,必须有160个矩阵,每个矩阵由901列组成,因此它们的总和为
160 x 901=144160
。您只指定了901,因此MATLAB抱怨告诉您
901!=144160

mat2cell
的输出创建了一个矩阵单元数组,您可以使用
y{k}
来访问第k个矩阵。花括号很重要。但是,如果我可以推荐一些东西,我不会使用
mat2cell
,您可能应该使用并创建一个3D矩阵,其中每个切片都是
256 x 901

y = reshape(x, 256, 901, []);

使用单元阵列效率非常低,因为它被设计为通用容器。如果您计划进行数值分析,或者希望一次访问多个矩阵,请坚持使用纯数值类型。使用
重塑
的另一个好处是避免了计算总共需要160个矩阵的麻烦。这样,您可以将其中一个维度留空(即
[]
),这会告诉
重塑
命令自动确定如何使用矩阵
x
中给定的元素填充此维度。请注意,我在第三维度上做得很明智。换句话说,它会自动为你计算出第三维度的160。这里,
y(:,:,k)
给出第k个矩阵,是3D矩阵的第k个切片
y

重塑
ftw+1.