Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何将矩阵划分为大小不相等的子矩阵?

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

作为参考,如果行大小都相同,则相当简单,如下所示:
如何将矩阵分成相等的部分?



回答:

这是使用linspacerounddiff函数的简单解决方案:

[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] 如果您希望随机分配额外的行,可以使用randperm如下所示:

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

更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



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


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