如何使用 f2py 更新 python 变量

How to update python variables with f2py

提问人:Tanus Szabo 提问时间:11/11/2023 更新时间:11/22/2023 访问量:61

问:

我正在尝试创建一个使用 fortran 进行一些计算的 python 程序,但我正在努力使用子例程更新变量值。 举一个简单的例子来说明我的意思,我有一个python脚本:r.py

import fortran_script
import numpy as np

a = np.array([10, 20, 30], np.float32)
b = 10
fortran_script.fmodule.r(a, b)
print(f"a = {a}")
print(f"b = {b}")

和一个 Fortran 脚本:r.f90

module fmodule
      implicit none
contains
      subroutine r(a, b)
      real, intent(inout):: a(:)
      integer, intent(inout) :: b
      a(1:3)=a(3:1:-1)
      b=b+10
      write(*,*) 'a = ', a
      write(*,*) 'b = ', b
      end subroutine r
end module fmodule

使用 fortran 编译脚本并运行 python 代码,fortran 写入了正确的值:f2py

 a =    30.0000000       20.0000000       10.0000000    
 b =           20

但是python没有得到整数的正确值:b

a = [30. 20. 10.]
b = 10

所以,我的问题是如何使用 f2py 正确地将值从 fortran 子例程传递和返回到 python?

蟒蛇 fortran f2py

评论


答:

0赞 Karthik 11/22/2023 #1

您还需要将 b 作为 numpy 数组传递以取回其值。

评论

0赞 Vladimir F Героям слава 11/24/2023
欢迎。这可能是正确的,但你能解释一下或举个例子吗?我建议参观并阅读如何回答。请注意,已经有一个更全面的答案,但作者可能删除了它,因为它收到了反对票。