我有一个矩阵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发布于 2013-04-08 04:25:38
可以使用带有输入d = [1 2 3]的mat2cell将最终拆分存储在单独的单元格数组中
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)https://stackoverflow.com/questions/15866892
复制相似问题