Tvor0zhok

Транспонирование разреженной матрицы (Последовательный алгоритм)

Jun 4th, 2022 (edited)
723
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.78 KB | None | 0 0
  1.     /// <summary>
  2.     /// Преобразование матрицы в CSC формат
  3.     /// </summary>
  4.     /// <returns> матрица в формате CSC </returns>
  5.     CSC_Matrix<T> toCSC()
  6.     {
  7.         vector <int> colptr(_M + 1);
  8.  
  9.         for (int i = 0; i < _NNZ; ++i)
  10.         {
  11.             int col = _cols[i];
  12.             if (col != _M - 1) ++colptr[col + 2];
  13.         }
  14.  
  15.         for (int i = 3; i <= _M; ++i)
  16.             colptr[i] += colptr[i - 1];
  17.  
  18.         vector <T> values(_NNZ);
  19.         vector <int> rows(_NNZ);
  20.  
  21.         for (int i = 0; i < _N; ++i)
  22.             for (int j = _rowptr[i]; j < _rowptr[i + 1]; ++j)
  23.             {
  24.                 int col = _cols[j];
  25.                 T value = _values[j];
  26.  
  27.                 int pos = colptr[col + 1]++;
  28.  
  29.                 rows[pos] = i;
  30.                 values[pos] = value;
  31.             }
  32.  
  33.         CSC_Matrix<T> *res = new CSC_Matrix<T>(_N, _M, _NNZ, values, rows, colptr);
  34.         return *res;
  35.     }
Add Comment
Please, Sign In to add comment