Split

行列を複数の部分行列に分割します。

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

パラメータ

parts

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

axis

[in] 軸。0 — 水平軸、1 — 垂直軸。

splitted

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

戻り値

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

注意事項

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

  matrix matrix_a={{ 1, 2, 3, 4, 5, 6},
                   { 7, 8, 9,10,11,12},
                   {13,14,15,16,17,18},
                   {19,20,21,22,23,24},
                   {25,26,27,28,29,30}};
  matrix splitted[];
  ulong parts[]={2,2};
 
  bool res=matrix_a.Split(2,0,splitted);
  Print(res,"  ",GetLastError());
  ResetLastError();
  for(uint i=0; i<splitted.Size(); i++)
    Print("splitted ",i,"\n",splitted[i]);
 
  res=matrix_a.Split(2,1,splitted);
  Print(res,"  ",GetLastError());
  for(uint i=0; i<splitted.Size(); i++)
    Print("splitted ",i,"\n",splitted[i]);
 
  res=matrix_a.Split(parts,0,splitted);
  Print(res,"  ",GetLastError());
  for(uint i=0; i<splitted.Size(); i++)
    Print("splitted ",i,"\n",splitted[i]);
 
 /*
false 4003
true 0
splitted 0
 [[1,2,3]
  [7,8,9]
  [13,14,15]
  [19,20,21]
  [25,26,27]]
splitted 1
 [[4,5,6]
  [10,11,12]
  [16,17,18]
  [22,23,24]
  [28,29,30]]
true 0
splitted 0
 [[1,2,3,4,5,6]
  [7,8,9,10,11,12]]
splitted 1
 [[13,14,15,16,17,18]
  [19,20,21,22,23,24]]
splitted 2
 [[25,26,27,28,29,30]]
 */