数据交换 - Python和Fortran

时间:2015-06-09 15:38:38

标签: python-2.7 fortran

我们正在开发一个科学应用程序,它具有python 2.7中的接口和用英特尔Visual Fortran编写的计算例程。使用python读取源文件,然后只需要将计算所需的数据传递给独立的Fortran算法。计算完成后,数据必须再次由python读取。

使用格式化文本文件似乎耗时太长而且效率不高。此外,我们希望有一个标准的中间格式。可能有大约20个阵列,而且这些阵列很大(如果写入格式化文本,则文件大约为500 MB)。

Q1。在类似的情况下,Python和Fortran数据交换是必要的。什么是推荐的互动方式? (例如:编写一个中间数据,由其他从Python 中调用Fortran,使用numpy创建兼容的数组等。 )

Q2。如果建议编写中间结构,什么格式有利于数据交换? (我们遇到了CDF,NETCdf,二进制流,但到目前为止还没有尝试过。)

2 个答案:

答案 0 :(得分:7)

在Python中包装Fortran代码的标准方法是使用f2py(包含在numpy模块中)。

对于中间结果的输出,可以使用多种格式,这实际上取决于您的要求。

  • 对于简单的数据集,来自python,只需使用numpy.save
  • 如果您的数据集变大,可以使用HDF5,例如Python中的PyTables和Fortran中的libhdf5
  • 否则,如果您不想将代码链接到外部库,则从Fortran编写并使用numpy解析的自定义二进制文件也可以正常工作。

答案 1 :(得分:3)

我会直接在Python和Fortran之间进行交互。使用Numpy分配内存并将指针传递给Fortran是相对简单的。您使用iso_c_binding为Fortran例程编写C兼容的包装程序,并使用ctypes加载Fortran .dll并调用包装器。如果你感兴趣我可以把一个简单的例子放在一起(但我现在很忙)。