首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用预定义数量的子矩阵行在MATLAB中拆分矩阵

使用预定义数量的子矩阵行在MATLAB中拆分矩阵
EN

Stack Overflow用户
提问于 2013-04-08 03:37:38
回答 1查看 985关注 0票数 1

我有一个矩阵A

代码语言:javascript
复制
 1     1     0     0
 0     1     0     0
 1     0     0     1
 0     0     1     0
 0     0     0     0
 0     1     1     1
 1     1     0     0
 1     0     0     0
 0     0     0     1

我希望这个矩阵根据用户的输入进行拆分,比如d = [1 2 3].

代码语言:javascript
复制
for i=2:length(d)
  d(i) = d(i) + d(i-1); % d = [1 3 6]
end

这就给了d = [1 (1+2) (1+2+3)] = d[1 3 6]。这个矩阵有9行,计算[(1/6)*9][(3/6)*9][(6/6)*9]ceil。因此,这给出了[2 5 9].第一次拆分是前两行,第二次拆分是下一个(5-2=3) 3行,第三次拆分是(9-5=4) 4行。

输出应如下所示:

拆分方式为:第一次拆分->

代码语言:javascript
复制
      1     1     0     0    % first 2 rows in matrix A
      0     1     0     0

第二次拆分->

代码语言:javascript
复制
      1     0     0     1    % next 3 rows
      0     0     1     0
      0     0     0     0

第三次拆分->

代码语言:javascript
复制
      0     1     1     1    % next 4 rows
      1     1     0     0
      1     0     0     0
      0     0     0     1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-08 04:25:38

可以使用带有输入d = [1 2 3]mat2cell将最终拆分存储在单独的单元格数组中

代码语言:javascript
复制
B = mat2cell(A, d+1, size(A,2));

或者,将其调整为适合拆分行大小的计算:

代码语言:javascript
复制
d = [1 2 3];
c = cumsum(d); % [1, 3, 6]

s = ceil(size(A,1)*c/c(end)); % [2, 5, 9] 
n = [s(1) diff(s)]; % [2, 3, 4]

B = mat2cell(A, n, size(A,2));

要显示拆分,可以添加类似于以下内容的命令:

代码语言:javascript
复制
cellfun(@disp, B)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15866892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档