Скудные разреженные матрицы в качестве входных данных для petsc4py
Я не могу найти способ, как эффективно загружать скудные разреженные матрицы, например csr_matrix
в матрицу petsc4py, например PETSc.Mat().createAIJ
, Я нашел эту ветку, но я не могу ее применить.
Я также был бы признателен за указатель, где этот материал фактически задокументирован. Примеры в demo
директория объясняет только часть, и я не вижу никаких строк документации.
1 ответ
Ваша ссылка говорит, что для создания разреженной матрицы в PETSc, вы должны использовать такую команду:
PETSc.Mat().createAIJ(size=(nrows,ncols), csr=(ai,aj,aa))
Согласно этому, ai
, aj
а также aa
есть, в PETSc-говорят:
> i - row indices
> j - column indices
> a - matrix values
Это эквивалентно, соответственно, .indptr
, .indices
а также .data
атрибуты scypy.sparse.csr_matrix
см. документы для деталей.
Итак, если ваша ссылка верна, должно работать следующее:
>>> 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))
К сожалению, я не могу проверить это сам.