1

我有一个矩阵 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 行ceil[(1/6)*9]计算 [(3/6)*9][(6/6)*9]。因此,这给出了[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
4

1 回答 1

5

您可以使用mat2cellwith inputd = [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)
于 2013-04-07T20:25:37.867 回答