MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   如何将矩阵划分为大小不相等的子矩阵? (https://www.labfans.com/bbs/showthread.php?t=24271)

poster 2019-12-10 20:48

如何将矩阵划分为大小不相等的子矩阵?
 
我想知道是否有可能使用mat2cell函数将一个划分MxN矩阵成10子矩阵与同一列大小, N ,以及大致相同的行大小~M/10 ?如果mod(M, 10) == 0那么所有子矩阵都将具有相同的大小,否则一些矩阵将具有+/- 1行。通过mat2cell函数可以做到这一点吗?

作为参考,如果行大小都相同,则相当简单,如下所示:
[URL="https://stackoverflow.com/q/1817174/52738"]如何将矩阵分成相等的部分?[/URL]



[B]回答:[/B]

这是使用[URL="https://www.mathworks.com/help/matlab/ref/linspace.html"]linspace[/URL] , [URL="https://www.mathworks.com/help/matlab/ref/round.html"]round[/URL]和[URL="https://www.mathworks.com/help/matlab/ref/diff.html"]diff[/URL]函数的简单解决方案:

[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(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] 如果您希望随机分配额外的行,可以使用[URL="https://www.mathworks.com/help/matlab/ref/randperm.html"]randperm[/URL]如下所示:

subSizes = diff(round(linspace(0, M, nSub+1))); cMat = mat2cell(mat, subSizes(randperm(nSub)), N);

[url=https://stackoverflow.com/questions/4550136]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 20:35

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.