无法理解CUSP中CSR表示的输出

时间:2013-05-01 09:29:06

标签: output sparse-matrix cusp-library

我正在尝试使用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 个答案:

答案 0 :(得分:2)

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矩阵格式的工作原理。否则可以随意提问。