работать с форматом сжатых строк из igraph_sparsemat_t - PullRequest
0 голосов
/ 22 ноября 2018

Можно ли построить igraph_sparsemat_t из уже доступной матрицы, хранящейся в формате сжатой строки (CSR), и не устанавливать каждое значение с помощью igraph_sparsemat_entry()?

Также можно извлечь структуру CSR изigraph_sparsemat_t, чтобы я мог использовать CSR-матрицу с другими библиотеками?

Я знаю, что преобразование из igraph_sparsemat_t в igraph возможно, но я не знаю, что я мог бы сделать оттудана.

1 Ответ

0 голосов
/ 22 ноября 2018

В документации igraph упоминается, что igraph_sparsemat_t является тонкой оболочкой для библиотеки данных CXSparse .Документация для этой библиотеки - это, по сути, эта книга:

Но вы этого не делаетедействительно нужна книга, чтобы решить это.Вы можете немного покопаться в источнике и найти, что 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 / и т. Д.) И используйте их вместо себястандартный malloc / free, чтобы гарантировать, что совместимая free используется в памяти, выделенной с определенным malloc.

Обратите внимание, что интерфейс MATLAB в CSparse (взгляните на источники, которые я связал выше) такжеиспользует этот подход: он напрямую манипулирует структурой.

Наконец, обратите внимание, что igraph интерпретирует эту матрицу как CSC, а не CSR.Если вы конвертируете в структуру данных другой библиотеки, вам может понадобиться транспонировать.Если вы сделаете это, вам все равно придется конвертировать в (индекс, значение) пары.

...