Vsplit

Вертикальное разделение матрицы на несколько подматриц. То же самое, что Split с axis=1

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={{ 123456},
                    { 789,10,11,12},
                    {13,14,15,16,17,18}};
   matrix splitted[];
   ulong  parts[]={2,3};
 
   matrix_a.Vsplit(2,splitted);
   for(uint i=0i<splitted.Size(); i++)
      Print("splitted ",i,"\n",splitted[i]);
 
   matrix_a.Vsplit(3,splitted);
   for(uint i=0i<splitted.Size(); i++)
      Print("splitted ",i,"\n",splitted[i]);
 
   matrix_a.Vsplit(parts,splitted);
   for(uint i=0i<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]]
 
  */