.: [предыдущая | оглавление | следующая] :.

6.1 Векторизация матриц и тензоров

6.1.1 Динамическое распределение для матрицы целых чисел

Функция распределения памяти и установки начальных значений для целой матрицы

int **AllocIntMatrix( int m, int n)
{
      int **mas;
      int i,j;
      mas=(int **)malloc(sizeof(mas)*m); //выделение памяти под вектор указателей размерностью m
      if (mas==NULL) return NULL;
      for (i=0; i<m; i++) //выделение памяти под строку целых чисел
      {
            mas [i]=( int *)malloc(sizeof( int)*n); //выделяем память под вектор целых чисел размерностью n
           
if (mas[i]==NULL) return NULL;
            //начальная инициализация матрицы целых чисел
                  for (j=0; j<n; j++) //все элементы устанавливаем в единицу
                       
mas [i][j]=1;
      }
      return mas;
}

Функция удаления памяти, занимаемой матрицей

void DeleteIntMatrix(int **matr, int m)
{
      int i;
      for (i=0; i<m; i++) free (matr[i]); //освободить память, выделенную под строки
      free (matr); //освободить память, выделенную под массив указателей
}

Тестовый пример использования целых матриц

void main()
{
      int i,j,k;
     
int **imatr1=AllocIntMatrix(2,3); //распределить память под первую матрицу
      int **imatr2=AllocIntMatrix(3,2); //распределить память под вторую матрицу
      int **res=AllocIntMatrix(2,2); //распределить память под результирующую
      for(k=0; k<2; k++) //вычислить произведение двух матриц
     
for(i=0; i<2; i++)
      {
           
res[k][i]=0;
           
for(j=0; j<3; j++)
                 
res[k][i]+=imatr2[j][i]*imatr1[i][j];
      }
     
for(i=0; i<2; i++) //вывести результат
      {
           
for(j=0; j<2; j++)
                 
printf("%d ",res[i][j]);
           
printf( "\n");
      }
      //освободить память
     
DeleteIntMatrix(imatr1,2);
     
DeleteIntMatrix(imatr2,3);
     
DeleteIntMatrix(res,2);
     
getch();
}
.: [предыдущая | оглавление | следующая] :.