我们正在开发一个科学应用程序,它具有python 2.7中的接口和用英特尔Visual Fortran编写的计算例程。使用python读取源文件,然后只需要将计算所需的数据传递给独立的Fortran算法。计算完成后,数据必须再次由python读取。
使用格式化文本文件似乎耗时太长而且效率不高。此外,我们希望有一个标准的中间格式。可能有大约20个阵列,而且这些阵列很大(如果写入格式化文本,则文件大约为500 MB)。
Q1。在类似的情况下,Python和Fortran数据交换是必要的。什么是推荐的互动方式? (例如:编写一个中间数据,由其他或从Python 或中调用Fortran,使用numpy创建兼容的数组或等。 )
Q2。如果建议编写中间结构,什么格式有利于数据交换? (我们遇到了CDF,NETCdf,二进制流,但到目前为止还没有尝试过。)
答案 0 :(得分:7)
在Python中包装Fortran代码的标准方法是使用f2py
(包含在numpy
模块中)。
对于中间结果的输出,可以使用多种格式,这实际上取决于您的要求。
numpy.save
。 libhdf5
。numpy
解析的自定义二进制文件也可以正常工作。 答案 1 :(得分:3)
我会直接在Python和Fortran之间进行交互。使用Numpy分配内存并将指针传递给Fortran是相对简单的。您使用iso_c_binding
为Fortran例程编写C兼容的包装程序,并使用ctypes
加载Fortran .dll并调用包装器。如果你感兴趣我可以把一个简单的例子放在一起(但我现在很忙)。