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

分类: Python Numpy_Scipy fortran MinGW_GCC_Boost f2py 2012-03-21 13:20 722人阅读 评论(0) 收藏 举报
fortranpython语言csubroutine

请看示例F77文件:

[plain] view plaincopy
  1. C FILE: CALLBACK.F
  2. SUBROUTINE FOO(FUN,R)
  3. EXTERNAL FUN
  4. INTEGER I
  5. REAL*8 R
  6. Cf2py intent(out) r
  7. R = 0D0
  8. DO I=-5,5
  9. R = R + FUN(I)
  10. ENDDO
  11. END
  12. C END OF FILE CALLBACK.F

在DOS窗口输入:

[plain] view plaincopy
  1. f2py -c -m callback callback.f

下面是测试:

[python] view plaincopy
  1. >>> import callback
  2. >>> print callback.foo.__doc__
  3. foo - Function signature:
  4. r = foo(fun,[fun_extra_args])
  5. Required arguments:
  6. fun : call-back function
  7. Optional arguments:
  8. fun_extra_args := () input tuple
  9. Return objects:
  10. r : float
  11. Call-back functions:
  12. def fun(i): return r
  13. Required arguments:
  14. i : input int
  15. Return objects:
  16. r : float
  17. >>> def f(i): return i*i
  18. ...
  19. >>> print callback.foo(f)
  20. 110.0
  21. >>> print callback.foo(lambda i:1)
  22. 11.0

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

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

可以再看下面的例子:

[plain] view plaincopy
  1. subroutine calculate(x,n)
  2. cf2py intent(callback) func
  3. external func
  4. c     The following lines define the signature of func for F2PY:
  5. cf2py real*8 y
  6. cf2py y = func(y)
  7. c
  8. cf2py intent(in,out,copy) x
  9. integer n,i
  10. real*8 x(n)
  11. do i=1,n
  12. x(i) = func(x(i))
  13. end do
  14. end

在DOS窗口输入:

[python] view plaincopy
  1. f2py -c -m foo calculate.f

下面是在Python中测试:

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

以上都是官方的示例

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

  1. 奇淫怪巧之在Delphi中调用不申明函数

    前一阵子,研究了一段时间的Win32Asm,研究到后来发现Win32的ASM实际上还是和C版的介绍的一样.甚至还封装了一个简版的类似VCL库结构框架的32ASM结构库,不过搞着搞着就没兴趣了,也没继续 ...

  2. 易语言 存储过程 mysql_在易语言中调用MS SQL SERVER数据库存储过程(Transact-SQL)方法总结...

    作者:liigo 日期:2010/8/25 Microsoft SQL SERVER 数据库存储过程,根据其输入输出数据,笼统的可以分为以下几种情况或其组合:无输入,有一个或多个输入参数,无输出,直接 ...

  3. powershell执行c语言文件,c语言中调用shell脚本

    [转]c语言中调用shell脚本 关于在c语言中调用shell脚本,先是在百度上百度了一下 下面的这个应该是说的比较详细的 dreamerkxz.blog.163.com/blog/static/82 ...

  4. c语言中调用函数fn,C语言常见的函数调用

    C语言常见的函数调用 isatty,函数名,主要功能是检查设备类型,判断文件描述词是否为终端机. 函数名: isatty 用 法: int isatty(int desc); 返回值:如果参数desc ...

  5. 如何将matlab代码转为C语言(2)--在C++中调用matlab的函数

    如何将matlab代码转为C语言(2)–在C++中调用matlab的函数 在上一条博文中提供了一种直接在matlab操作中的方法,下面提供一种新的调用方法,即在C++中调用matlab中的dll文件. ...

  6. gnuplot用C语言程序画图,c语言中调用gnuplot

    this.p={ m:2, b:2, loftPermalink:'', id:'fks_080064087085082068082081082095083086088068085081080068' ...

  7. c语言编译时间,C语言中关于时间的函数

    C语言中关于时间的函数 C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.下面我们一 ...

  8. Lua中调用C/C++函数 (转)

    1.前言 上次偶说到从C/C++中调用Lua的函数, 然后就有朋友问从Lua中如何调用C/C++的 函数, 所以偶们这次就来说说这个问题. 首先偶们会在C++中建立一个函数, 然后 告知Lua有这个函 ...

  9. 【C 语言】文件操作 ( C 语言中的文件操作函数 | 磁盘与内存缓冲区 | 缓冲区工作机制 )

    文章目录 一.C 语言中的文件操作函数 二.磁盘与内存缓冲区 三.缓冲区工作机制 一.C 语言中的文件操作函数 读取 文本文件 可以使用 getc , fgets , fscanf 函数 , 向 文本 ...

最新文章

  1. OpenCV | 二值图像分析的技巧都在这里
  2. 招聘|字节跳动招计算机视觉方向算法实习生
  3. Gaussian Filter
  4. leetcode 113. 路径总和 II
  5. 网卡故障会出现的错误代码_布袋除尘器压差过高就会导致出现故障
  6. 分享一款自用网站导航分类目录程序源码
  7. 数据库-MySQL-配置和管理-用户与授权GRANT
  8. kafka发送与接收数据(含奇葩报错解决方案)
  9. spring boot http status 400_kubernetes configmap 热更新spring-boot应用
  10. C#之获取本地IP地址
  11. 返回一个数组的连续子数组和的最大值
  12. kafka 查看待消费数据_通过Kafka Connect进行数据迁移
  13. 内外兼修的移动办公伴侣:联想YOGA S730评测体验
  14. 银联在线支付网关,实现快捷安全的全球支付
  15. t00ls.net关闭了
  16. 大一c语言程序课程报告,大一C语言课程设计.doc
  17. 在网站的地址栏中的显示个性图标
  18. Rewrite和RewriteRule规则,http强转https的配置总结
  19. 在主窗口中打开一个子窗口,主窗口和子窗口怎么传递参数?
  20. 微信小程序,横向布局,纵向布局

热门文章

  1. Arrays.sort()源码分析
  2. 正则表达式-趣现象一则
  3. 2019年如何打造自己的“前端品牌”
  4. linux服务器宕机分析/性能瓶颈分析
  5. Nginx技巧:灵活的server_name,Nginx配置一个服务器多个站点 和 一个站点多个二级域名...
  6. beego-安装(window版)
  7. Centos常用系统命令
  8. getElementsByName 的应用,获取组的选择值
  9. nyoj 931 货物运输(Floyd输出路径)
  10. poj 3459(背包问题)