是否可以从以行压缩(CSR)格式存储的现有矩阵中构建igraph_sparsemat_t
,而不用igraph_sparsemat_entry()
设置每个值?
我还可以从igraph_sparsemat_t
中提取CSR结构,以便可以将CSR矩阵与其他库一起使用吗?
我知道从igraph_sparsemat_t
到igraph
的转换是可能的,但是我不知道从那以后我能做什么。
答案 0 :(得分:0)
igraph文档提到igraph_sparsemat_t
是the 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.h
(cs_di_malloc
/ cs_di_free
/ etc等中的内存分配/解除分配函数,并使用它们代替标准的malloc / free来确保兼容free
用于分配了特定malloc
的内存。
请注意,CSparse的MATLAB接口(请看我上面链接的源代码)也使用这种方法:它直接操纵结构。
最后,请注意igraph将此矩阵解释为CSC,而不是CSR。如果转换为另一个库的数据结构,则可能需要转置。如果这样做,则无论如何都需要转换为(索引,值)对。