f2py:包装fortran模块,它利用分布在不同文件中的子路由?

时间:2012-05-26 14:11:24

标签: python lapack f2py

由于我描述earlier的原因,我需要在Python中使用LAPACKs dgesvd和zgesvd方法,而不是在numpy中包含的方法。

有人指出,我可以使用f2py创建自己的python包。麻烦的是,lapack中的dgesdd调用了许多其他方法,如dbdsqr,dgelqf以及一些BLAS例程,我不知道,我该如何处理。

任何人都可以指出,创建dgesvd python模块的方法是什么,而不必重新编译整个lapack库?

非常感谢 米莎

1 个答案:

答案 0 :(得分:4)

您不需要包装整个LAPACK库,只需要包装所需的LAPACK例程。例程与下面的Fortran调用连接。我已经成功地使用英特尔的MKL完成了这个问题,其中一个解决方案类似于dgesvd(显然我无法重新编译,因为它是封闭源代码!)。

唯一的要求是你提供链接到LAPACK库的路径(无论如何你都需要顶层例程):

f2py -L/path/to/lapack -llapack -m module -c module.f

(当然,将库路径和库名称替换为适用于您机器的名称)

在module.f中的代码周围只需要一个包装器,因为module.f中的所有调用都像纯Fortran一样完成。