【问题标题】:Split matrix in MATLAB using predefined numbers of submatrix rows使用预定义的子矩阵行数在 MATLAB 中拆分矩阵
【发布时间】:2013-04-07 19:37:38
【问题描述】:

我有一个矩阵 A

 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].

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 行。

输出应该是这样的:

拆分为:第一次拆分->

      1     1     0     0    % first 2 rows in matrix A
      0     1     0     0

第二次分手->

      1     0     0     1    % next 3 rows
      0     0     1     0
      0     0     0     0

第三次分手->

      0     1     1     1    % next 4 rows
      1     1     0     0
      1     0     0     0
      0     0     0     1

【问题讨论】:

  • 听起来你已经有了一些可以工作的东西。有什么问题/疑问?
  • 您想高效完成这项工作吗?
  • @gevang- 我想在命令窗口中显示输出。这可能吗?
  • 只需输入您要显示的条目,即B{1}, B{2}, B{3},或全部输入B{:}
  • 我希望它在我运行程序时自动显示在命令窗口中。

标签: matlab matrix


【解决方案1】:

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

B = mat2cell(A, d+1, size(A,2));

或者,使其适应您对拆分行大小的计算:

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

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

cellfun(@disp, B)

【讨论】:

    猜你喜欢
    • 2014-05-18
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多