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={{ 123456},
                    { 789,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=0i<splitted.Size(); i++)
      Print("splitted ",i,"\n",splitted[i]);
 
   res=matrix_a.Split(2,1,splitted);
   Print(res,"  ",GetLastError());
   for(uint i=0i<splitted.Size(); i++)
      Print("splitted ",i,"\n",splitted[i]);
 
   res=matrix_a.Split(parts,0,splitted);
   Print(res,"  ",GetLastError());
   for(uint i=0i<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]]
  */