我是Fortran的新手,我正在尝试使用f2py在python内运行fortran。当fortran函数将输出作为单个值给出时,我很幸运。但是,当我修改fortran函数以给出一个数组时,我遇到了分段错误。
有人可以帮我吗?
这是代码:
Fortran函数:在名为“ fortfunc.f95”的文件中:
function fut(x,n)
implicit none
real, intent(in) :: x
integer, intent(in) :: n
real, dimension(2) :: fut
! My aim is to return an array fut which has 2 elements in it
fut(1)=x*n
fut(2)=x*n*100
end function fut
然后我使用f2py编译要在python中使用的fortran函数:
f2py -c -m func fortfunc.f95
此处func是要在python中导入的模块的名称
Python代码:(非常简单)
import func # func is the name of module which contains function fut
x=20
n=20
res=func.fut(x,n)
print('answer is ',res)
我希望得到一个包含2个称为'res'的元素的数组,但我却得到了 “细分错误:11”
有人可以指出我的错误吗?
答案 0 :(得分:2)
如果使用子例程,则可以在调用函数之前创建return数组。在这种情况下,您的Python脚本将如下所示
import func
import numpy as np
res = np.zeros(2)
x = 20
n = 20
func.fut(res, x, n)
print("answer is", res)
在Fortran代码中,您可以创建一个子例程。请注意,我将类型替换为double precision
,因为Fortran real
默认是单精度浮点数,而Python使用双精度。
subroutine fut(a,x,n)
implicit none
double precision, intent(in) :: x
integer, intent(in) :: n
double precision, intent(inout), dimension(2) :: a
! My aim is to return an array fut which has 2 elements in it
a(1) = x*n
a(2) = x*n*100
end subroutine fut