2013-03-15 3 views
5

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

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

+0

Что именно вы пробовали и как оно не сработало? У меня нет «petsc4py» в моей системе, но инструкции в вашей ссылке кажутся мне довольно простыми. – Jaime

ответ

6

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

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

Согласно this, в 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)) 

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

+0

Это полностью отвечает на мой вопрос. Вы также подняли мою путаницу в отношении документации, потому что функция 'Mat(). CreateAIJ()', очевидно, вызывает функцию PETSc (легко читаемый код), которая действительно документирована. Я просто не понимал, что этот вызов функции является прямым вызовом функции PETSc. –

+0

@RafaelReiter Вы можете посмотреть исходный код petsc4py [здесь] (https://code.google.com/p/petsc4py/source/browse/), функция 'createAIJ' есть [здесь] (https://code.google.com/p/petsc4py/source/browse/src/PETSc/Mat.pyx#242). Кажется, это немного сложнее, чем «Mat_AllocAIJ_CSR», который мне не удалось найти, и я не совсем уверен, что происходит под капотом. Но если это сработает для вас, то это сработает для вас ... – Jaime

+0

Вы правы, все не так просто. Я думал, что несколько часов назад я видел «MatCreateSeqAIJWithArrays» в коде, но я этого не делал. Есть ли у вас какой-либо намек на то, как придумать правильный способ использования всех функций petsc4py рядом с демонстрационными версиями? –

Смежные вопросы