使用 F2PY 将数组从 Python 传递到 Fortran 结果错误 = 2(形状相关)

Passing arrays from Python to Fortran with F2PY results error=2 (shape related)

我有 Fortran 代码,我想使用 f2py 从 Python 提供这些代码。但是我无法通过 f2py 传递已知形状的 Numpy 数组。 (我在 Python 2.7.10 上使用 gfortran 和 mingw32 作为编译器)。

这是我的 Fortran 代码:

Subroutine test(nx,ny,mask)
  Integer, intent(inout) :: mask(ny,nx) 
  !f2py intent(in,out) mask
End

在Python中是这样调用的:

from test import test
import numpy as np

nx = 2
ny = 2

mask = np.ones((nx,ny),dtype=int)

maskreturn = test(nx,ny,mask)

运行 脚本结果:

  error: (shape(mask,1)==nx) failed for 1st keyword nx: test:nx=2

我不知道如何制作它 运行(对于更大的模型,我需要正确传递网格)。那里有什么可怕的 Fortran Noob 错误吗?

以下似乎对我有用

untitled.f90 中的 Fortran 块:

subroutine test(nx,ny,mask)
  integer, intent(in) :: nx, ny
  integer, dimension(nx,ny), intent(inout) :: mask
  !f2py intent(in,out) mask                                                                                                                                                                                         
  print*,nx,ny,mask
end subroutine test

编译:

f2py -c --fcompiler=gnu95 untitled.f90

在python中做:

from untitled import test
import numpy as np
nx = 2 ; ny = 2
mask = np.ones((nx,ny),dtype=np.int32)
temp = test(mask,ny,nx) #Note the reversed order

我希望这会有所帮助,但我对 f2py 没有经验,所以无法解释更多为什么会这样。

更新 在寻找可能的重复项后,我遇到了 这解释了 how/why 上述工作。