小编blb*_*rns的帖子

使用Ctypes从Python调用Fortran时返回数组

如何使用ctypes将数组从Fortran返回到Python?

作为一个例子,我将一个数组(长度为5)从Python传递给Fortran.使用相同的值创建输出数组.然后,它被传递回Python.在Fortran中,值是正确的,但在被发送回Python后,它们不是.我的设置怎么样不允许阵列正确传递?

我的Fortran代码(例如,test.f)包含以下内容:

SUBROUTINE mySub(inArray, lenInOut, outArray) BIND(C)

USE ISO_C_BINDING
IMPLICIT NONE

INTEGER(C_INT), INTENT(IN), VALUE :: lenInOut
REAL(C_DOUBLE), DIMENSION(lenInOut), INTENT(IN) :: inArray
REAL(C_DOUBLE), DIMENSION(lenInOut), INTENT(OUT) :: outArray

print *, "outArray from within Fortran"
do i = 1, lenInOut
  outArray(i) = inArray(i)
  print *, outArray(i)
end do
return
end subroutine mySub
Run Code Online (Sandbox Code Playgroud)

这被编译为.so:

ifort -g -O0 -fpic -traceback -c -o "test.o" "../test.f"
ifort -shared -o "mylib.so"  ./test.o
Run Code Online (Sandbox Code Playgroud)

Python代码如下:

from ctypes import *

mylib = CDLL('mylib.so')

ArrayType = c_double*5
IntType = c_int
input1 …
Run Code Online (Sandbox Code Playgroud)

python arrays fortran ctypes

4
推荐指数
1
解决办法
634
查看次数

标签 统计

arrays ×1

ctypes ×1

fortran ×1

python ×1