首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么scipy会暴露Lapack pbsv (b表示带状,例如linalg.solveh_banded)而不是ptsv (t表示三对角线)?

为什么scipy会暴露Lapack pbsv (b表示带状,例如linalg.solveh_banded)而不是ptsv (t表示三对角线)?
EN

Stack Overflow用户
提问于 2012-04-20 06:30:33
回答 1查看 342关注 0票数 0

查看scipy.linalg.solveh_banded的源代码,它只是包装了Lapack pbsv。我正在寻找一种更有效的三对角线(Hermitian,或者在我的例子中是实对称)系统的求解器,我认为应该由Lapack ptsv函数提供。此外,如果沿着主对角线的(全正)值的动态范围太大,solveh_banded将崩溃,即使这不是一个实际问题(我猜测舍入使最小的值看起来实际上是负的,因此它被视为具有负的特征值),并且有可能特定于三对角线的例程不会遇到这个问题。

从我对Lapack的阅读来看,ptsv似乎应该包含在任何具有pbsv的发行版中(文档总是将它们一起列出)。我真的不确定哪个更有效(pbsv假设对称,但具有任意带宽,而ptsv假设三对角线,但不一定对称),但似乎值得尝试ptsv。

不幸的是,ptsv似乎没有在scipy中公开,我认为这实际上意味着它不包括在scipy.linalg.flapack中,因此不能通过scipy.linalg.get_lapack_funcs(('ptsv',))获得。

我知道Fortran/Lapack与scipy的链接很复杂,但有人知道为什么pbsv和ptsv会被区别对待吗?有没有什么我可以手工编辑的东西来尝试包装ptsv,比如pbsv (不幸的是,flapack似乎只提供了一个".so“,所以我陷入了死胡同)?

FWIW我正在使用英特尔MKL的EPD。然而,考虑到scipy.linalg (独立于分布)总是包含solveh_banded,但没有三对角线求解器,我认为它肯定比EPD/MKL问题更深。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-20 22:56:48

并不是所有的Lapack都暴露在scipy中。

如果一个函数没有公开,那么很可能是因为没有人需要它,或者因为没有人需要它,包装器写道。

作为示例,下面是几个公开其他功能的pull请求

https://github.com/scipy/scipy/pull/124

https://github.com/scipy/scipy/pull/76

https://github.com/scipy/scipy/pull/185

我不知道如何在github上找到solveh_banded的初始提交。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10237777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档