我正在努力学习f2py
,我有以下Fortran代码
subroutine fibonacci(a, n)
implicit none
integer :: i, n
double precision :: a(n)
do i = 1, n
if (i .eq. 1) then
a(i) = 0d0
elseif (i .eq. 2) then
a(i) = 1d0
else
a(i) = a(i - 1) + a(i - 2)
endif
enddo
end subroutine fibonacci
它是用f2py -c fibonacci.f -m fibonacci
编译的,后来在Python中调用
import numpy
import fibonacci
a = numpy.zeros(13)
fibonacci.fibonacci(a)
print a
Python中调用的子例程fibonacci
没有获得足够数量的参数,但代码神秘地工作。顺便说一下,用fibonacci.fibonacci(a, len(a))
调用子例程fibonacci
也可以
有人能解释一下吗?谢谢
f2py
知道a
和n
是函数参数,并且从声明中可以看出可以推断
n
是a
的长度。NumPy数组有一个长度,因此Python包装器中不需要参数n
,并且f2py
使其成为可选的请注意,
f2py
生成的代码检查您没有给出太大的值n
:您可以给出较小的值:
您可能会发现生成并查看
f2py
为该函数生成的接口文件很有用。命令显示
并生成文件
fibonacci.pyf
,其中包含您可以从生成的声明中看到
该
f2py
已推断n
应为可选参数,其值不得超过a
的长度,其默认值为len(a)
相关问题 更多 >
编程相关推荐