【问题标题】:How to call and pass array from Fortran to python? [duplicate]如何从 Fortran 调用数组并将其传递给 python? [复制]
【发布时间】:2022-01-19 06:55:52
【问题描述】:

我有 Fortran 主代码。我希望从我的主 Fortran 代码中调用一个 python 程序并在这两个代码之间传递数组。

我见过几个 F2py 的例子。似乎 python 代码作为主要代码。正如我之前所描述的,我想要反过来。

让我们在主 Fortran 代码中有一个子程序:

subroutine test(nx,ny,mask)
  integer, intent(in) :: nx, ny
  integer, dimension(nx,ny), intent(inout) :: mask
  
  call someOperation(nx, ny, mask)
end subroutine test

现在,someOperationpython 中完成,带有标量值的多维数组将在 Fortran 和 python 之间交换。

怎么做?

【问题讨论】:

标签: python arrays fortran


【解决方案1】:

有2大类方式:

  • 混合语言编程(即单一进程)

    可以在已编译的程序中嵌入完整的 Python 解释器(这是 py2exe、pyinstaller 或 alii 的工作方式),但这是一个相当复杂的操作。或者你可以编写一个 Python 扩展来调用 Python 的 Fortran 代码。它更简单,但仍然需要大量工作......

    一旦完成,您就可以“轻松”地从另一种语言的函数中调用一种语言的函数。但是传参也不是那么容易,即使swig在这方面做得很好。

    该类别中的最后一种方法是使用 Cython。它是一个可以本地调用 C 函数的 Python 解释器:您只需将 C 与 Fortran 接口,就容易多了。

  • 2 个不同的进程(一个用于 Fortran,一个用于 Python)

    这里主进程将启动辅助进程,相当于popensystem,并通过管道、套接字或文件交换序列化数据。可能效率较低,但要简单得多。

TL/DR:为编译的程序调用 Python 既不是常见的操作,也不是简单的操作:确保您没有其他方法可以解决您的问题。您可以尝试将处理从一开始在 Python 中必须完成的工作和 Fortran 中必须完成的工作之间分开,并编写不同的程序,您只需一个接一个地调用它们。它会为您省去头痛和噩梦...

【讨论】:

    猜你喜欢
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2022-11-09
    • 2013-10-29
    • 2018-01-15
    相关资源
    最近更新 更多