有没有办法在 fortran 和 python 之间传递任意精度的数字?

问题描述

我目前正在编写一个非常注重有限差分的程序。问题是为了获得我需要的精度,我需要使用任意精度的算术。我有一个纯粹的 Python 脚本来完成这项工作,但速度很慢,所以我正在考虑将计算有限差分的任务传递给编译后的 Fortran 代码

我正在处理的当前实现是我使用 SymPy 和 mpmath 在 Python 中生成多个精度的初始数据,将其保存在某个文本文件中,然后由 F2PY 的 Fortran 代码读取,然后由后者完成大部分以任意精度工作。 Fortran 将数据保存在其他文件中,Python 读取它以进行一些后处理。

如果我可以在 Fortran 和 Python 之间自由地传递任意精度的数字(例如,mpath 的 mpf 数据类型和 mpfun 的 mp_real),而不是经历读取和写入多个精度数据的麻烦,那么这对我很有用.如果这可以用其他语言代替,例如 C,我也很想知道。或者也许有更好的方法来做到这一点?

解决方法

看看cython。您可以使用 gfortran 和 gcc 进行编译,使用等效的 C 头文件导入,然后使用 cython 或 python C api 执行任何操作。你可以很容易地将 fortran 拼接到 C 中,并将 C 拼接到 python 中。 http://www.yolinux.com/TUTORIALS/LinuxTutorialMixingFortranAndC.html 提供了非常好的指南,堆栈中还有许多关于特定项目的问题和答案。