如何使用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)