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);