разреженные матрицы scipy как вход для petsc4py

Я не могу найти способ эффективно загружать разреженные матрицы scipy, например csr_matrix, в матрицу petsc4py, например,PETSc.Mat().createAIJ. Я нашел этой теме, но я не могу применить его.

Я также был бы признателен указатель, где это на самом деле задокументировано. Примеры в demo каталог объясняет только часть, и я не вижу никаких docstrings.

1 ответов


ваша ссылка говорит, что для создания разреженной матрицы в PETSc, вы должны использовать команду:

PETSc.Mat().createAIJ(size=(nrows,ncols), csr=(ai,aj,aa))

по данным этой, the ai, aj и aa находятся, в PETSc-говорят:

> i - row indices
> j - column indices
> a - matrix values

они эквивалентны, соответственно,.indptr, .indices и .data атрибуты scypy.sparse.csr_matrix см. docs для сведения.

Итак, если ваша ссылка верна, следует работа:

>>> from petsc4py import PETSc
>>> import scipy.sparse
>>> csr_mat = scipy.sparse.rand(1000, 1000, density=0.001, format='csr')
>>> petsc_mat = PETSc.Mat().createAIJ(size=csr_mat.shape,
...                                   csr=(csr_mat.indptr, csr_mat.indices,
...                                        csr_mat.data))

к сожалению, я не могу проверить это сам.