f2py支持在fortran语言中调用其他Fortran函数或C代码或Python代码

来源:互联网 发布:电脑端手机淘宝模拟器 编辑:程序博客网 时间:2024/05/20 18:49


请看示例F77文件:

C FILE: CALLBACK.F      SUBROUTINE FOO(FUN,R)      EXTERNAL FUN      INTEGER I      REAL*8 RCf2py intent(out) r      R = 0D0      DO I=-5,5         R = R + FUN(I)      ENDDO      ENDC END OF FILE CALLBACK.F


在DOS窗口输入:

f2py -c -m callback callback.f


下面是测试:

>>> import callback>>> print callback.foo.__doc__foo - Function signature:  r = foo(fun,[fun_extra_args])Required arguments:  fun : call-back functionOptional arguments:  fun_extra_args := () input tupleReturn objects:  r : floatCall-back functions:  def fun(i): return r  Required arguments:    i : input int  Return objects:    r : float>>> def f(i): return i*i... >>> print callback.foo(f)     110.0>>> print callback.foo(lambda i:1)11.0

更纤细的说明,请看官方网站:

http://cens.ioc.ee/projects/f2py2e/

 

可以再看下面的例子:

      subroutine calculate(x,n)cf2py intent(callback) func      external funcc     The following lines define the signature of func for F2PY:cf2py real*8 ycf2py y = func(y)ccf2py intent(in,out,copy) x      integer n,i      real*8 x(n)      do i=1,n         x(i) = func(x(i))      end do      end


在DOS窗口输入:

f2py -c -m foo calculate.f


下面是在Python中测试:

 

>>> import foo>>> foo.calculate(range(5), lambda x: x*x)array([  0.,   1.,   4.,   9.,  16.])>>> import math>>> foo.calculate(range(5), math.exp)array([  1.        ,   2.71828175,   7.38905621,  20.08553696,  54.59814835])


以上都是官方的示例

原创粉丝点击