背景

因为编程需要使用python和fortran(或者c,c++)混合编程,所以进行了一些资料查询和实验。首先尝试了f2py,但是这个项目已经很久没有更新,为了以后兼容性考虑(后期可能会使用到c++),放弃了使用f2py。

平台

win7, gfortran 7.2 Anaconda5.3

ubuntu16.4,gfortran 5.4 Anaconda5.3

python调用fortran

主要根据pasuka的三篇博文,以及网络上转载的的一篇文章整理出使用ctypes的解决方法。

ctypes是python和c数据(也可以为fortran)交换的桥梁,直接上代码。

!test.f90

subroutine fun(n,p) Bind(C,Name="fun")

use,intrinsic :: iso_c_binding

implicit none

integer(c_int),value :: n !intent(in)可以加也可以不加

real(c_double) :: p(n) !intent(out)可以加也可以不加

integer(c_int) i

do i=1,n

p(i)=i*i

end do

return

end

此处定义了一个C类型的函数,名字叫fun,并且其数据类型定义均采用c_*来进行定义(输入输出数据,其它的不重要,但是为了保证数据运算时类型相同,一般定义一致),其中value关键字为必须的,该关键字规定了变量n是按值传递进该函数的(the actual argument is passed “by value”.),这样就与c的调用保持一致了。

编译命令为

gfortran test.f90 -fPIC -shared -o test.so

当然也可以加上其他的优化参数。

在python中调用的代码为。

import numpy as np

from numpy.ctypeslib import load_library,ndpointer

from ctypes import c_int

f = load_library("test.so",".")

n = 3

p = np.array([100,10,500],dtype='f8',order='f')

f.fun.argtypes=[c_int,ndpointer(dtype='f8',ndim=1)]

f.fun(n,p)

print(p)

load时,在linux下不需要加动态库的后缀名,在windows下必须加。

其余参见代码。

这样即可在python中调用fortran(调用c代码应该类似)。

后面尝试调用c++代码,因为有部分代码使用了c++的模板功能。

参考文献

python fortran混合编程_python fortran c 混合编程相关推荐

  1. python 栈实现 加减乘除_Python自学笔记,编程中简单的加减乘除

    日常生活中,我们都会有过很多的加减乘数的基本运算.今天我们来看看Python这么编程语言,是怎么进行简单的基本运算的.废话不多说,我们开始吧开发工具:IDLE (Python 3.7 64-bit)这 ...

  2. python套接字编程_Python套接字编程(1)——socket模块与套接字编程

    在Python网络编程系列,我们主要学习以下内容: 5. 常见的Python异步编程框架 6. 协程在Python网络编程中的使用 本文介绍Python下的基本套接字编程,主要基于 socket 模块 ...

  3. python极客项目编程_Python极客项目编程 ([美]Mahesh Venkitachalam) 中文pdf完整版

    Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.通过Python编程,我们能够解决现实生活中的很多任务.Python极客项目编程通过14个有趣的项目,帮助和鼓励读者探索Python ...

  4. python socket编程_Python学习记录-socket编程

    1. OSI七层模型详解 2. Python socket 什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答 ...

  5. python控制结束多线程_python进阶八——并发编程之多线程

    1:线程介绍 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程 车间负责把资源整合到 ...

  6. python服务端编程_Python WebSocket服务端编程代码完成gtalk机器人

    本文python源码为实现,Python WebSocket服务端编程代码完成gtalk机器人的全部代码段.需要用到python sys.sleekxmpp.reactor等python模块及方法,在 ...

  7. python概率编程_Python中的概率编程

    python概率编程 Learn about probabilistic programming in this guest post by Osvaldo Martin, a researcher ...

  8. python多线程控制暂停_python中的多线程编程与暂停、播放音频的结合

    我们都知道python中可以是threading模块实现多线程, 但是模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦s ...

  9. python六芒星怎么画_Python Turtle绘画初学编程——六芒星,浪形圈

    老师上课说可以自学一下python中的绘图turtle,就自己初步学习了一下,做了两个简单的绘图--六芒星和浪形圈(其实我也不知道该叫它什么,就照样子编了个词??). 六芒星的代码: 1 import ...

最新文章

  1. 计算机专业英语第三章在线测试,《计算机专业英语》第03章在线测试
  2. vue怎么让接口带上cookie_在Vue中如何使用Cookie操作实例
  3. 索引-linux-技术大钢
  4. 错过就找不到了 Java API文档 免费下载!!!
  5. 【转载】pyinstaller的使用和几个坑
  6. 绝秘:在Excel中快速输入数据
  7. 知名应用背后的第三方开源项目
  8. 【转】几种不同格式的json解析
  9. linux的htb队列,Linux内核TC工具链路带宽设计--HTB队列规定及简单的过滤器介绍
  10. Apple Music 推出空间音频和无损音频
  11. 继昨天的猜拳游戏,升级为老虎机版
  12. 2020年个人年终工作总结报告及2021年工作计划怎么利用敬业签历史记录 利用云便签备忘录及待办事项的任务清单有效解决2020年终总结报告的撰写
  13. 小孩上楼梯的方式的种类
  14. 图片显示方向不对怎么办
  15. 工业交换机在高速道路隧道监控系统解决方案
  16. 修改jupyter notebook的默认主页(默认工作空间)
  17. NLP之jieba分词原理简析
  18. 用Python实现自制桌面宠物,变出一个桌面小挂件
  19. 安卓基础控件(EditText、Button)以及布局(约束布局)的介绍
  20. dmp标签_今日头条新增DMP新标签,人群定向更简单!

热门文章

  1. 四项第一!这款芯片让全世界嫉妒!
  2. 一行 Python 代码能实现什么丧心病狂的功能? | CSDN博文精选
  3. V神已抵京,倒计时4天!6大理由告诉你为什么要参加“2019以太坊技术及应用大会”...
  4. 科技无障碍盛会举办,人工智能和创新成为高频词!
  5. Http Body 的四种格式
  6. 翻译是不是计算机常用的颜色模式,关于颜色的翻译
  7. openquery 如果执行存储过程_ORA-01502--记一次数据库索引失效导致执行存储过程出错...
  8. c语言期末读程序,C语言期末程序.doc
  9. python计算2的20次方_Python学习二运算符
  10. 计算机电子表格的相关试题,(统考计算机模拟练习试题及答案电子表格.doc