Вот простое решение с использованием функций 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);
Этот подход будет распределять дополнительные строки более равномерно по результирующим ячейкам массива ячеек.Обратите внимание на следующие выходные данные, которые вы получите при применении вышеуказанного с использованием 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
вот так:
subSizes = diff(round(linspace(0, M, nSub+1)));
cMat = mat2cell(mat, subSizes(randperm(nSub)), N);