【问题标题】:scipy sparse matrices as an input for petsc4pyscipy 稀疏矩阵作为 petsc4py 的输入
【发布时间】:2013-03-15 21:47:44
【问题描述】:

我似乎无法找到一种方法来有效地加载 scipy 稀疏矩阵,例如csr_matrix,放入 petsc4py 矩阵,例如PETSc.Mat().createAIJ。我找到了this thread,但我无法应用它。

我也很感激这些东西实际记录在哪里的指针。 demo目录下的例子只解释了一部分,看不到任何文档字符串。

【问题讨论】:

  • 您到底尝试了哪些方法,但没有成功?我的系统上没有petsc4py,但在我看来,您链接中的说明很容易理解。

标签: python scipy petsc


【解决方案1】:

您的链接说要在 PETSc 中创建稀疏矩阵,您应该使用如下命令:

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

根据thisaiajaa 在 PETSc 中是:

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

它们分别等效于scypy.sparse.csr_matrix.indptr.indices.data 属性,有关详细信息,请参阅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))

很遗憾,我自己无法测试。

【讨论】:

  • 这完全回答了我的问题。您还解除了我对文档的困惑,因为 Mat().createAIJ() 函数显然调用了确实记录在案的 PETSc 函数(易于阅读的代码)。只是没有意识到这个函数调用是直接调用PETSc函数。
  • @RafaelReiter 其实可以看一下petsc4py的源码here,函数createAIJ就是here。它似乎比这更复杂一点,一个我无法找到的Mat_AllocAIJ_CSR 被调用,所以我不确定引擎盖下发生了什么。但如果这对你有用,那么它对你有用......
  • 你说得对,事情没那么简单。我以为几个小时前我在代码中看到了MatCreateSeqAIJWithArrays,但我没有。除了演示之外,您是否有任何提示如何想出使用所有 petsc4py 功能的正确方法?
  • 我找到了调用层次结构:Mat_AllocAIJ_CSRsrc/PETSc/petscmat.pxi中,它在src/include/custom.h中调用MatAnyAIJSetPreallocationCSR,它调用了各种PETSc函数,例如MatMPIAIJSetPreallocationCSR 实际上记录在 PETSc 文档中。呼……
  • 有人知道如何使用 petsc4py 获得稀疏系统的并行求解器吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-19
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
  • 2017-03-26
  • 2017-03-31
相关资源
最近更新 更多