对igraph_sparsemat_t中的行压缩格式进行操作

时间:2018-11-22 01:00:04

标签: c igraph

是否可以从以行压缩(CSR)格式存储的现有矩阵中构建igraph_sparsemat_t,而不用igraph_sparsemat_entry()设置每个值?

我还可以从igraph_sparsemat_t中提取CSR结构,以便可以将CSR矩阵与其他库一起使用吗?

我知道从igraph_sparsemat_tigraph的转换是可能的,但是我不知道从那以后我能做什么。

1 个答案:

答案 0 :(得分:0)

igraph文档提到igraph_sparsemat_tthe CXSparse library数据类型的精简包装。该库的文档本质上是本书:

但是您真的不需要书来解决这个问题。您可以在源代码中挖掘一点,然后发现igraph_sparsemat_t仅包含一个cs_di_sparse,即

typedef struct cs_di_sparse  /* matrix in compressed-column or triplet form */
{
    int nzmax ;     /* maximum number of entries */
    int m ;         /* number of rows */
    int n ;         /* number of columns */
    int *p ;        /* column pointers (size n+1) or col indices (size nzmax) */
    int *i ;        /* row indices, size nzmax */
    double *x ;     /* numerical values, size nzmax */
    int nz ;        /* # of entries in triplet matrix, -1 for compressed-col */
} cs_di ;

您可以直接构建或阅读。

igraph文档提到它可能包含三元组矩阵的CSC表示形式。请注意这一点(请参阅最后一个条目的评论)。

请查看cs.hcs_di_malloc / cs_di_free / etc等中的内存分配/解除分配函数,并使用它们代替标准的malloc / free来确保兼容free用于分配了特定malloc的内存。

请注意,CSparse的MATLAB接口(请看我上面链接的源代码)也使用这种方法:它直接操纵结构。

最后,请注意igraph将此矩阵解释为CSC,而不是CSR。如果转换为另一个库的数据结构,则可能需要转置。如果这样做,则无论如何都需要转换为(索引,值)对。