这是使用函数的简单解决方案linspace https://www.mathworks.com/help/matlab/ref/linspace.html, round https://www.mathworks.com/help/matlab/ref/round.html, and diff https://www.mathworks.com/help/matlab/ref/diff.html:
[M, N] = size(mat); % Matrix size
nSub = 10; % Number of submatrices
cMat = mat2cell(mat, diff(round(linspace(0, M, nSub+1))), N);
此方法将以更均匀的方式在元胞数组的结果元胞中分配额外的行。请注意在应用上述内容时您将获得的这些输出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]
如果您希望随机分布额外的行,您可以使用randperm https://www.mathworks.com/help/matlab/ref/randperm.html像这样:
subSizes = diff(round(linspace(0, M, nSub+1)));
cMat = mat2cell(mat, subSizes(randperm(nSub)), N);