f2py支持在fortran語言中調用其他Fortran函數或C代碼或Python代碼
分類: Python Numpy_Scipy fortran MinGW_GCC_Boost f2py 2012-03-21 13:20 722人閱讀 收藏 舉報
fortranpython語言csubroutine
請看示例F77文件:
[plain] view plaincopy
C?FILE:?CALLBACK.F????????SUBROUTINE?FOO(FUN,R)????????EXTERNAL?FUN????????INTEGER?I????????REAL*8?R??Cf2py?intent(out)?r????????R?=?0D0????????DO?I=-5,5???????????R?=?R?+?FUN(I)????????ENDDO????????END??C?END?OF?FILE?CALLBACK.F??
在DOS窗口輸入:
[plain] view plaincopy
f2py?-c?-m?callback?callback.f??
下面是測試:
[python] view plaincopy
>>>?import?callback??>>>?print?callback.foo.__doc__??foo?-?Function?signature:????r?=?foo(fun,[fun_extra_args])??Required?arguments:????fun?:?call-back?function??Optional?arguments:????fun_extra_args?:=?()?input?tuple??Return?objects:????r?:?float??Call-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/
?
可以再看下面的例子:
[plain] view plaincopy
??????subroutine?calculate(x,n)??cf2py?intent(callback)?func????????external?func??c?????The?following?lines?define?the?signature?of?func?for?F2PY:??cf2py?real*8?y??cf2py?y?=?func(y)??c??cf2py?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窗口輸入:
[python] view plaincopy
f2py?-c?-m?foo?calculate.f??
下面是在Python中測試:
?
[python] view plaincopy
>>>?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])??
以上都是官方的示例
總結
以上是生活随笔為你收集整理的f2py支持在fortran语言中调用其他Fortran函数或C代码或Python代码的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。