gpt4 book ai didi

python - 将 FORTRAN 变量传递给 Python

转载 作者:行者123 更新时间:2023-11-28 18:52:12 25 4
gpt4 key购买 nike

我有一个从 Python 脚本调用的 FORTRAN 程序(作为 ArcGIS 工具)。我需要将数组 Raster_Z(i,j) 从 FORTRAN 传递给 python。

我读过 Python subprocess module ;然而,我并没有很幸运地理解如何用 FORTRAN 来做到这一点。我发现的所有示例都涉及简单的 unix 命令行调用,而不是实际程序。

有没有人有通过内存 PIPE 将变量从 FORTRAN 传递到 Python 的经验?

感谢您的宝贵时间。

最佳答案

要通过 subprocess 模块中的 PIPE 将数组传递给 FORTRAN,您需要弄清楚如何将此数组作为命令行参数传递给 FORTRAN。这是因为 PIPE 使用类似 shell 的界面(如果需要,也可以使用实际的 shell)来调用程序。要使用您的方法,我会制作一个如下所示的 Python 列表:

arguments = [rows, columns] + [x for x in Raster_Z.flatten()]

我假设您使用的是 numpy。该列表可以通过 PIPE 传输到 STDIN。这样,您告诉 FORTRAN 数组的行数和列数,以便它可以分配内存,然后它将读入扁平化的数组,您可以根据需要对其进行整形。展平数组还有一个额外的好处,即消除从数组的行顺序到列顺序存储的烦人转换。

我实际上已经使用 PIPE 完成了您想要做的事情,只是我没有通过 STDIN 将数组通过管道传输到 FORTRAN 例程,而是将其写入一个临时文件,然后通过该文件从 FORTRAN 中读取它。我最初尝试按照上面建议的方法进行操作,但是我遇到了 FORTRAN 从 STDIN 读取大量数据的问题……我将此归因于缓冲。您的里程数可能会有所不同,STDIN 可能适合您。

或:

您可以使用 f2py 包装您的 FORTRAN 例程,然后将数组直接发送到 FORTRAN,就好像它是 python 函数一样,不需要 PIPEing!。

关于python - 将 FORTRAN 变量传递给 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10819766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com