f2py:包装使用分布在不同文件中的子程序的Fortran模块?

4
由于我之前所述的原因,我需要在Python中使用LAPACK的dgesvd和zgesvd方法,而不是numpy中包装的方法。 有人指出,我可以使用f2py创建自己的Python包。问题是,lapack中的dgesdd调用了一堆其他方法,如dbdsqr、dgelqf以及一些BLAS例程,我不知道该如何处理。 有人能指出,创建一个dgesvd Python模块的正确方法而不必重新编译整个lapack库吗? 非常感谢 Mischa
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
5
您不需要包装整个LAPACK库,只需要包装您想要的LAPACK例程。例程在底层与Fortran调用相关联。我已经成功地使用Intel的MKL完成了其中一种类似于dgesvd的求解器的这项工作(显然我无法重新编译它,因为它是闭源的!)。 唯一的要求是您提供链接到LAPACK库的路径(无论如何,您都需要这个顶级例程)。
f2py -L/path/to/lapack -llapack -m module -c module.f

当然,根据你的机器,替换库路径和库名称。

在module.f中仅需要包装代码,因为所有module.f内部调用都像纯Fortran一样执行。


太好了,我会尝试一下并回复你的,谢谢! - Mischa Obrecht
这已经帮了很大的忙,谢谢。但我仍然有一个问题,就是获取奇异向量的返回数组。你能看一下我的后续问题吗?请点击此处:http://stackoverflow.com/questions/10774594/f2py-some-of-returned-arrays-are-unchanged-empty - Mischa Obrecht

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,