我有一个矩阵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
Run Code Online (Sandbox Code Playgroud)
我想根据用户的输入说明拆分这个矩阵 d = [1 2 3].
for i=2:length(d)
d(i) = d(i) + d(i-1); % d = [1 3 6]
end
Run Code Online (Sandbox Code Playgroud)
这给了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
Run Code Online (Sandbox Code Playgroud)
第二次分手 - >
1 0 0 1 % next 3 rows
0 0 1 0
0 0 0 0
Run Code Online (Sandbox Code Playgroud)
第3次分手 - >
0 1 1 1 % next 4 rows
1 1 0 0
1 0 0 0
0 0 0 1
Run Code Online (Sandbox Code Playgroud)
您可以使用mat2cell
输入d = [1 2 3]
将最终拆分存储在单独的单元阵列中
B = mat2cell(A, d+1, size(A,2));
Run Code Online (Sandbox Code Playgroud)
或者,使其适应您对分割行大小的计算:
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));
Run Code Online (Sandbox Code Playgroud)
要显示拆分,您可以添加类似于的命令:
cellfun(@disp, B)
Run Code Online (Sandbox Code Playgroud)