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].最初の分割は最初の 2 行、2 番目の分割は次の (5-2=3) 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

3度目の分裂→

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

1 に答える 1

5

mat2cellwith inputを使用しd = [1 2 3]て、最終的な分割を個別の cell 配列に格納できます。

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 に答える