将矩阵转换为单元阵列的单元阵列

Ste*_* Du 5 matlab

我想将矩阵N*123456更改为单元格单元格,每个子单元格包含N*L矩阵

例如:

matrixSize= 50*123456
N=50
L=100
Run Code Online (Sandbox Code Playgroud)

输出为1*1235小区,每个小区有50*L矩阵(最后一个小区只有50*56)

我知道matlab中有一个函数mat2cell:

Output = mat2cell(x, [50], [100,100,100,......56])
Run Code Online (Sandbox Code Playgroud)

但它听起来并不直观.

那么有一个很好的解决方案吗?

bla*_*bla 4

如果我理解正确,假设你的矩阵表示为m,这就是你想要的:

a=num2cell(reshape(m(:,1:size(m,2)-mod(size(m,2),L)),N*L,[]),1);
a=cellfun(@(n) reshape(n,N,L), a,'UniformOutput',false);
a{end+1}=m(:,end-mod(size(m,2),L)+1:end);
Run Code Online (Sandbox Code Playgroud)

(如果您愿意,可以将其缩短为一行)...让我们用一些最小的数字进行测试:

m=rand(50,334);
N=50; 
L=100;
Run Code Online (Sandbox Code Playgroud)

产量:

a = 
[50x100 double]    [50x100 double]    [50x100 double]    [50x34 double]
Run Code Online (Sandbox Code Playgroud)

请注意,我没有检查重塑中的确切尺寸,因此您可能需要重塑为...,[],N*L)等。