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

时间:2016-06-02 12:40:51

标签: python arrays numpy fortran f2py

我有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错误吗?

1 个答案:

答案 0 :(得分:1)

以下似乎对我有用

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没有经验,所以无法解释为什么会有效。

更新在查找可能的重复项后,我遇到了this answer,其中解释了上述工作的原因/原因。