Vsplit

行列を複数の部分行列に垂直に分割します(axis=1のSplitと同じ)

bool matrix::Vsplit(
const ulong parts,     // 部分行列の数
  matrix&     splitted[]  // 結果の部分行列の配列
  );
 
void matrix::Vsplit(
const ulong& parts[],   // 部分行列のサイズ
  matrix&     splitted[]  // 結果の部分行列の配列
  );

パラメータ

parts

[in] 行列を分割してできる部分行列の数

splitted

[out] 結果の部分行列の配列

戻り値

成功の場合はtrue、それ以外の場合はfalse

注意事項

部分行列の数が指定されている場合、同じサイズの部分行列が取得されます。つまり、列数はpartsで割り切れる必要があります。部分行列サイズの配列を使用して、異なるサイズの部分行列を取得できます。サイズ配列の要素は、行列全体が分割されるまで使用されます。サイズの配列が終了し、行列がまだ完全に分割されていない場合、分割されていない残りが最後の部分行列になります。

  matrix matrix_a={{ 1, 2, 3, 4, 5, 6},
                   { 7, 8, 9,10,11,12},
                   {13,14,15,16,17,18}};
  matrix splitted[];
  ulong parts[]={2,3};
 
  matrix_a.Vsplit(2,splitted);
  for(uint i=0; i<splitted.Size(); i++)
    Print("splitted ",i,"\n",splitted[i]);
 
  matrix_a.Vsplit(3,splitted);
  for(uint i=0; i<splitted.Size(); i++)
    Print("splitted ",i,"\n",splitted[i]);
 
  matrix_a.Vsplit(parts,splitted);
  for(uint i=0; i<splitted.Size(); i++)
    Print("splitted ",i,"\n",splitted[i]);
 
 
 /*
    splitted 0
    [[1,2,3]
     [7,8,9]
     [13,14,15]]
    splitted 1
    [[4,5,6]
     [10,11,12]
     [16,17,18]]
 
    splitted 0
    [[1,2]
     [7,8]
     [13,14]]
    splitted 1
    [[3,4]
     [9,10]
     [15,16]]
    splitted 2
    [[5,6]
     [11,12]
     [17,18]]
 
    splitted 0
    [[1,2]
     [7,8]
     [13,14]]
    splitted 1
    [[3,4,5]
     [9,10,11]
     [15,16,17]]
    splitted 2
    [[6]
     [12]
     [18]]
 
 */