2013-04-07 129 views
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行,计算[(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 
+0

听起来你已经有了一些已经有效的东西。问题是什么? – tmpearce 2013-04-07 19:42:56

+0

你想这样做有效吗? – 2013-04-07 20:03:03

+0

@ gevang-我想在命令窗口中显示输出。那可能吗? – durga 2013-04-08 06:06:46

回答

5

您可以使用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) 
+0

+1对'mat2cell'的非常好的使用! – Floris 2013-04-07 20:54:38