将数组从Python传递到Fortran(以及返回)

时间:2014-01-18 14:45:18

标签: python arrays fortran f2py

背景
我的程序目前在Python中汇编数组。这些阵列连接到前端UI,因此具有交互元素(即数组元素中的用户指定值)。然后将这些数组保存为.txt文件(取决于它们以后的使用情况)。然后,用户必须离开Python程序并运行单独的Fortran脚本,该脚本模拟基于Python输出文件的系统。虽然这最多只需要几分钟,但理想情况下我希望自动完成这个过程,而不必离开我的Python UI。

汇编数组(Python) - > 编辑数组(Python) - > 导出到文件(Python)
- > 导入文件(Fortran) - > 运行模拟(Fortran) - > 将结果导出到文件(Fortran) )
- > 将文件导入UI,显示图形(Python)

问题:
这可能吗?我有什么选择自动化这个过程?我可以完全删除重复导出/导入文件吗?

修改 我还要提一下,fortran脚本使用了Lapack,我不知道这是否有所作为。

2 个答案:

答案 0 :(得分:3)

您不必使用文本文件将数组传递给Fortran代码。如果您创建Fortran代码的入口点作为子例程,则可以使用f2py传递所有numpy arrays。如果您自己添加了f2py标记,则应该注意这一点。只需使用众多教程中的任何一个,例如https://github.com/thehackerwithin/PyTrieste/wiki/F2Pyhttp://www.engr.ucsb.edu/~shell/che210d/f2py.pdf

返回的方法是相同的,Fortran代码只是用结果填充intent(out)intent(inout)数组和变量中的任何一个。

答案 1 :(得分:1)

我喜欢Python + Fortran堆栈。 :)

当需要在Python前端和Fortran引擎之间进行密切通信时,一个很好的选择是在Python中使用子进程模块。您可以将它们保存为数组,而不是将数组保存到文本文件中。然后,您将执行Fortran引擎作为Python脚本中的子进程。您将Python数组导入Fortran引擎,然后将结果输出到显示。

此解决方案需要将Python和Fortran代码中的文件I / O更改为写入和读取管道(在Python端)和/从标准输入和输出(在Fortran端),但在实践中,这不是太多的工作。

祝你好运!