由于我之前描述的原因,我需要在 Python 中使用 LAPACK 的 dgesvd 和 zgesvd 方法,而不是使用 numpy 包装的方法。
有人指出,我可以使用 f2py 来创建自己的 python 包。问题是,lapack 中的 dgesdd 调用了许多其他方法,例如 dbdsqr、dgelqf 以及一些 BLAS 例程,我不知道应该如何处理。
谁能指出,在不必重新编译整个 lapack 库的情况下创建 dgesvd python 模块的正确方法是什么?
非常感谢米沙
你不需要包装整个 LAPACK 库,只需要你想要的 LAPACK 例程。这些例程与下面的 Fortran 调用相关联。对于类似于 dgesvd 的求解器之一,我已经使用英特尔的 MKL 成功完成了此操作(显然我无法重新编译它,因为它是封闭源代码!)。
唯一的要求是您提供链接到 LAPACK 库的路径(无论如何您都需要顶级例程):
f2py -L/path/to/lapack -llapack -m module -c module.f
(当然,将库路径和库名称替换为您机器上适用的内容)
module.f 中的代码只需要一个包装器,因为 module.f 中的所有调用都像纯 Fortran 一样完成。