Hsplit

行列を複数の部分行列に水平に分割します(axis=0のSplitと同じ)

bool matrix::Hsplit(
const ulong parts,     // 部分行列の数
  matrix&     splitted[]  // 結果の部分行列の配列
  );
 
void matrix::Hsplit(
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},
                   {19,20,21,22,23,24},
                   {25,26,27,28,29,30}};
  matrix splitted[];
  ulong parts[]={2,4};
 
  bool res=matrix_a.Hsplit(2,splitted);
  Print(res,"  ",GetLastError());
  ResetLastError();
  for(uint i=0; i<splitted.Size(); i++)
    Print("splitted ",i,"\n",splitted[i]);
 
  res=matrix_a.Hsplit(5,splitted);
  Print(res,"  ",GetLastError());
  for(uint i=0; i<splitted.Size(); i++)
    Print("splitted ",i,"\n",splitted[i]);
 
  res=matrix_a.Hsplit(parts,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,4,5,6]]
splitted 1
 [[7,8,9,10,11,12]]
splitted 2
 [[13,14,15,16,17,18]]
splitted 3
 [[19,20,21,22,23,24]]
splitted 4
 [[25,26,27,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]
 [25,26,27,28,29,30]]
 */