Не в состоянии понять вывод Представления КСО в CUSP

Я пытаюсь использовать библиотеку CUSP. Я читаю.txt файлы, которые в основном имеют разреженное представление COO. Я использую CUSP для преобразования в формат CSR.

Когда я печатаю матрицу с cusp::print() он печатает правильный результат для представления COO. Однако когда я конвертирую матрицу в CSR, я написал свою собственную функцию для печати, но результат не тот, который я хочу.

Вот фрагмент

      main()
        {
        //.
        //bla bla
        //..
        //create a 2d coo matrix
    cusp::coo_matrix<int, int, cusp::host_memory> D(nRows_data, nCols_data, nnz_data);

            // Load data from file into sparse matrices  
            //fill 2D coo matrix
            fill2DCooMatrixFromFile( fNameData, D );


            std::cout<<"\n----------------------------\n";
            cusp::print( D );

            cusp::csr_matrix<int, int, cusp::host_memory> csrD = D;
            std::cout<<"\n----------------------------\n";
            printCSRMatrix( csrD );
        }



        //print csr matrix
        void printCSRMatrix( cusp::csr_matrix<int, int, cusp::host_memory> csr )
        {
            std::cout<<"csr matrix <"<<csr.num_rows<<", "<<csr.num_cols<<"> with  <csr.num_entries<<" enteries\n";

            std::cout<<"V  :: ";
            for( int i=0 ; i<csr.values.size() ; i++ )
                std::cout<<csr.values[i]<<"  ";
            std::cout<<"\n";


            std::cout<<"CI :: ";
            for( in

t i=0 ; i<csr.column_indices.size() ; i++ )
            std::cout<<csr.column_indices[i]<<"  ";
        std::cout<<"\n";


        std::cout<<"RO :: ";
        for( int i=0 ; i<csr.row_offsets.size() ; i++ )
            std::cout<<csr.row_offsets[i]<<"  ";
        std::cout<<"\n";

    }

Предположим, что fill2DCooMatrixFromFile заполняет следующую матрицу

1 0 1 0 0
0 0 0 1 0
0 0 0 0 0
0 1 0 0 0
0 0 0 1 0

Ниже приведен вывод, который я получаю с кодом

sparse matrix <5, 5> with 5 entries
              0              0              1
              0              2              1
              1              3              1
              3              1              1
              4              3              1

----------------------------
csr matrix <5, 5> with 5 enteries
V  :: 1  1  1  1  1  
CI :: 0  2  3  1  3  
RO :: 0  2  3  3  4  5  

Я не могу понять RowOffset, который является выходом.

1 ответ

RowOffset указывает совокупное количество записей. Он всегда начинается с 0 и заканчивается количеством ненулевых элементов, содержащихся в разреженной матрице.

RO:: 0 2 3 3 4 5

Следовательно, вы должны прочитать строку следующим образом: перед первой строкой вашей разреженной матрицы есть нулевые записи RO[0]. В первой строке есть две записи RO[1], они индексируются CI[0]-CI[1] и заполняются значениями V[0]-V[1]. Во второй строке вашей матрицы есть еще одна запись, следовательно, RO[2] == 3, и она расположена в столбце CI[2] со значением V[2].

Как видите, RO не меняет значения между третьим и четвертым числом, что указывает на пустую строку в матрице.

Надеюсь, что проясняет, как работает формат матрицы CSR. В противном случае не стесняйтесь спрашивать больше.

Другие вопросы по тегам