如何将矩阵划分为不等大小的子矩阵?

C. *_*eed 6 matlab matrix cell-array

我想知道是否可以使用该mat2cell函数将MxN矩阵划分为具有相同列大小的10个子矩阵N,并且行大小大致相同~M/10?如果mod(M, 10) == 0那么所有子矩阵将具有相同的大小,否则一些矩阵将具有+/- 1行.这是通过mat2cell功能吗?

作为参考,如果行大小都相同,那么它非常简单,如下所述:
如何将矩阵划分为等于零件?

gno*_*ice 5

下面是使用功能简单的解决方案linspace,round以及diff:

[M, N] = size(mat);  % Matrix size
nSub = 10;           % Number of submatrices
cMat = mat2cell(mat, diff(round(linspace(0, M, nSub+1))), N);
Run Code Online (Sandbox Code Playgroud)

这种方法将在单元阵列的最终单元格中以更均匀的方式分配额外的行.请注意使用mat = magic(5);(左)和mat = magic(13);(右)时应用上述输出:

cMat =              cMat = 

    [1x5 double]        [1x13 double]
    [0x5 double]        [2x13 double]
    [1x5 double]        [1x13 double]
    [0x5 double]        [1x13 double]
    [1x5 double]        [2x13 double]
    [0x5 double]        [1x13 double]
    [1x5 double]        [1x13 double]
    [0x5 double]        [1x13 double]
    [1x5 double]        [2x13 double]
    [0x5 double]        [1x13 double]
Run Code Online (Sandbox Code Playgroud)

如果你更喜欢随机分配额外的行,你可以这样使用randperm:

subSizes = diff(round(linspace(0, M, nSub+1)));
cMat = mat2cell(mat, subSizes(randperm(nSub)), N);
Run Code Online (Sandbox Code Playgroud)