python fortran混编_julialang和python混合编程的例子(一)

问题来源

julia的代码文件里如何嵌入python代码(除了pycall 的pyimport外)?

如何定义python函数?

如何引用第三方的python包?如何释放第三方包中的函数给julia使用?

如何逐步调试嵌入的python代码?

如何在用julia来完成主要业务处理,如何调用你定义的python函数,如何引用你定义的python变量?

前言

之前使用某量化接口获取数据,只有python的接口,当时在jupyter中开发。

后来因为回测时计算任务比较大,于是把【回测模块】和【数据下载】分开,回测模块用julia来写,数据下载依旧用python调用人家的量化接口。

后来随着代码增多,不好在jupyter里面组织,于是我改用juno【当时也安装了vscode】,发现更喜欢juno。

juno中可以分块执行,跟jupyter的cell一模一样的玩法,但是juno还提供了其他代码管理的功能,现在我基本迁移到juno里面了。

迁到juno后,以前用python写的数据下载模块,不能直接迁移,导致两地存放代码,不好管理。于是想到PyCall,我用PyCall引入量化接口的包,这样也倒蛮好,但是第三方包返回的有些数据,比如dataframe,不能被julia直接解析(需要额外处理),而且有写python的代码,很难用Julia去写。

比如以下代码为【获取前十大流通股东的信息】,我用Julia去改写,反反复复都没有通过。

q=query(finance.STK_SHAREHOLDER_FLOATING_TOP10).filter(finance.STK_SHAREHOLDER_FLOATING_TOP10.code==code,finance.STK_SHAREHOLDER_FLOATING_TOP10.end_date==day).limit(10)

df=finance.run_query(q)

后来发现julia里面,可以直接写python代码。

二、python版本——获取十大流通股东

下面的代码里,q=.........这一串代码,我花费了很长时间,也没能够用julia来正确改写。。。。。

def get_top10_holder(path:str,code:str,day:str):

"""

path:保存的路径,不带/

stock:股票代码

day:日期,一般选用公告日

"""

q=query(finance.STK_SHAREHOLDER_FLOATING_TOP10).filter(finance.STK_SHAREHOLDER_FLOATING_TOP10.code==code,finance.STK_SHAREHOLDER_FLOATING_TOP10.end_date==day).limit(10)

df=finance.run_query(q)

if len(df)> 0 :

display(df)

stockID = code.split(".")[0]

df.to_csv(f"{path}/{stockID}_{day}.csv")

def test():

path = "data"

stock = "600352"

day = '2020-03-31'

code = normalize_code(stock)

get_top10_holder(path,code,day)

print("okk!!!")

test()

三、在julia里面混合python的关键方法

(1)py""" """ 告诉julia,这是python代码块,相当于调用python的eval来执行

(2)py" " 告诉julia,这个地方是引用python object 的一个对象

#直接执行python代码块

py"""

【python代码块】

"""

#应用python代码中的变量或者函数

py"【python代码变量或者函数】"

四、改写以上的python代码

很简单,凡是python代码块,用py""" """包住你的python代码,相当于告诉julia编译器,这些代码要调用python来解释执行

py"""

python代码块

"""

"""

julia和python混合编程,以某量化接口包为例

"""

#引入包

py"""

import pandas as pd

from jqdatasdk import *

"""

#登录服务器

py"""

jqdatasdk.auth("137*******", "*****Quant008")

print("登录成功!!")

"""

#定义函数

py"""

def get_top10_holder(path:str,code:str,day:str):

#功能:获取股票【stock】在某个截止日【day】的前十大流通股东信息,并保存df为csv

#path:保存的路径,【不带/】

#stock:股票代码

#day:日期,一般选用公告日

q=query(finance.STK_SHAREHOLDER_FLOATING_TOP10).filter(finance.STK_SHAREHOLDER_FLOATING_TOP10.code==code,finance.STK_SHAREHOLDER_FLOATING_TOP10.end_date==day).limit(10)

df=finance.run_query(q)

if len(df)> 0 :

stockID = code.split(".")[0]

print(df)

df.to_csv(f"{path}/{stockID}_{day}.csv")

def test():

path = "data"

stock = "600352"

day = '2020-03-31'

code = normalize_code(stock)

get_top10_holder(path,code,day)

print(f"{stock}的k线数据保存成功!!")

test()

"""

真实的代码,自带高亮和格式,简直头等公民待遇

image.png

python代码调式,分块运行代码,结果如下,你也可以逐行运行,以便调试

登录成功!!

id company_id ... sharesnature_id sharesnature

0 4979131 420600352 ... 308007 流通A股

1 4979132 420600352 ... 308007 流通A股

2 4979133 420600352 ... 308007 流通A股

3 4979134 420600352 ... 308007 流通A股

4 4979135 420600352 ... 308007 流通A股

5 4979136 420600352 ... 308007 流通A股

6 4979137 420600352 ... 308007 流通A股

7 4979138 420600352 ... 308007 流通A股

8 4979139 420600352 ... 308007 流通A股

9 4979140 420600352 ... 308007 流通A股

[10 rows x 18 columns]

600352的k线数据保存成功!!

五、如果依旧想用julia来完成主要的业务逻辑,如何引用python编写好的函数

image.png

完整代码

# julia主逻辑

"""

julia主逻辑

"""

function main()

get_top10_holder = py"get_top10_holder" #把python定义的函数爆给julia

normalize_code = py"normalize_code" #同理,引用了一个python object ,它是一个函数

path = "data"

day = "2020-03-31"

stocks = ["600352","600353","600355","600359"]

stocks = normalize_code(stocks)

stocks .|> stock->get_top10_holder(path,stock,day)

end # function

main()

执行的结果如下:

image.png

下载的数据表

image.png

总结:

以julia为主要工作语言(胶水语言),python为辅助语言,男女搭配,干活不累!!!

计算量大的力气活julia去干,啰嗦复杂的针线慢活python去干!!!

调用只有python接口的第三方包,用python写或者引入,之后把函数传给julia去组织调用!!!

以画图为例,目前julia的plot包,不能很好的处理中文字符,那么,你用matplotlib吧,自带统计功能的seaborn模块也值得你拥有!!!

我觉得最方便的地方是:业务代码都放在一处了,随时改写,随时调试,调完一个模块,保存一个模块,美美哒!

后记,刚发布一分钟,就黄标了

image.png

请小编大人放行。。。。。。

从机械到数字:EC11旋转编码器与ESP32的PWM控制艺术 本文详细解析了EC11旋转编码器与ESP32的PWM控制技术,探讨了如何将机械旋转动作转换为精确的数字信号控制。通过硬件连接、信号处理软件优化等实践技巧,开发者可以构建高效的人机交互系统,适用于智能照明、电机控制等多种应用场景。 阅读详情

相关推荐

如何快速学习 PHP 编程:从入门到实战的高效路径

PHP高效学习路线摘要:4-8周掌握Web开发核心技能。阶段1(1周)搭建XAMPP/MAMP环境,掌握基础语法变量处理;阶段2(2周)重点学习表单处理、会话管理PDO数据库操作(防SQL注入);阶段3(2-3周)实战开发个人博客等小项目。关键原则:边学边练(每个知识点配3-5个案例)、优先掌握Web刚需技能(HTTP请求、数据库、动态页面)、善用官方手册。避坑点:密码必须加密、SQL使用预处理、统UTF-8编码。建议每天2-3小时实操,通过项目驱动学习,快速形成开发能力。

2501_94233638的博客 1360

fortranpython的区别_pythonfortran之间的参数传递

这个页面已经说的很详细了http://cens.ioc.ee/projects/f2py2e/usersguide/index.html#three-ways-to-wrap-getting-started过我还是从中提炼出几个特别需要注意的地方,以备自己日后查考1. 数据类型,numpy默认的数据类型为float64也就是双精度浮点数,所以fortran里的浮点数也必须是双精度的,需要声明为r...

weixin_39687192的博客 1013

高通平台开发系列讲解(系统篇)系统关机流程

📢本篇章主要图解高通平台系统关机流程。

内核笔记 3183

python调用fortran 交互_python调用fortran模块

python中调用fortran代码,要用到f2py这个程序。它的项目主页在此。现在该项目已经合并到numpy中了,先安装python再装好numpy,就可以使用f2py。过对windows平台必须使用gnu的fortran编译器gfortran,在此下载。装完了python,numpygfortran这三样东西之后,还必须更改如下几个环境变量:1.在$PATH中添加gfortran的路径,...

weixin_35871519的博客 2304

python封装fortran_如何编译用于PythonFortran库? (f2py可能个选项)

I'm trying to compile a fortran90 library (specifically this one) in order to call it from python (3.4.0). Generally in this case I would write a wrapper for f2py and call it a day, but the library it...

weixin_39604598的博客 338

python调用fortran 交互_利用Python的subprocess调用Fortran

目前有个需求,即由python的subprocess模块调用fortran语言编译的二进制执行文件;其中fortran文件需要读取来自屏幕的输入信息,直苦寻方法而得其门,终于在搜索引擎的帮助下,找到了这个答案,解决了我所有的问题.假如fortran文件如下:program maincharacter(80) :: param1, param2write(*,*) 'Now read th...

weixin_39935903的博客 379

python封装fortran_PythonFortran混合编程

简介:Fortran程序在地球物理学中并少见,90年代Fortran十分流行,386时代计算机时很珍贵,Fortran作为当时的高级语言,具有运行速度快,语法简单等诸多优点。现在虽然Fortran已经成为小众游戏,但过去曾经的那些基础计算程序还是有价值的,如果全要重新改写,但耗时耗力还容易出错。因此,今天我们讨论下如何在Python里面调用Fortran的函数。1、认识f2py混合编程方法有...

weixin_29023079的博客 2570

python导入模块失败_Python导入模块时遇到的错误分析

当遇到无法导入某个python模块时,可能会是没有安装某个模块,也有可能是某模块在加载过程中失败,也有可能是陷入了循环导入的问题。本文详细解释了这个问题。1. 模块未安装或者路径对ImportError: No mudule named myModule有两种可能,是该模块没有安装,般可以用pip install %module_name%来解决。注意有时候模块安装包名并等于要导入的模块名...

weixin_39649660的博客 6827

python3.7+vs2019环境下使用f2py将fortranc++程序编译为python

python3.7+vs2019环境下使用f2py将fortranc++程序编译为python库前言步骤1安装FortranVisual Studio编译环境2配置vs在python中的路径3测试c++编译环境4测试Fortran编译环境参考链接 前言 今天务必开贴记录下将Fortran或c++程序编译为python库的方法。 起因是老师给了Fortran函数,无奈本人看懂,因而想办法...

iroek 1861

python方法报错使程序停止_使用f2py在(Fortran)模块错误中停止python代码?

我正在使用f2py在Fortran中创建Python模块.如果在Fortran模块中遇到错误,我想在Python程序中产生错误(包括错误消息).请考虑以下示例:Fortran代码(test.f):subroutine foo(a,m)integer :: m,iinteger, dimension(m) :: a!f2py intent(in) :: m!f2py intent(in,out)...

weixin_39842918的博客 286

fortran的gui开发 python_pythonfortran的接口

由于历史缘故,很多成熟的计算代码都是用fortran写成的。在python中调用fortran代码,要用到f2py这个程序。现在该项目已经合并到numpy中了,先安装python再装好numpy,就可以使用f2py。个简单的例子:foo.f90subroutine hello (a)integer awrite(*,*)'Hello from Fortran90!!!', aend subrou...

weixin_39622399的博客 435

Android Studio 报错 : Cause : zip file is empty

找到项目目录 : gradle/warpper/gradle-wrapper.properties 文件并打开 在第六行,我这里显示的是: distributionUrl=http://services.gradle.org/distributions/gradle-4.4.1-all.zip 将链接转换为浏览器能读懂的格式: http://services.gradle.org/distributions/gradle-4.4.1-all.zip 去浏览器粘贴这个链接,下载 gradle-4.4.1-al

圈池 3094

fortran语言python_将python嵌入fortran 90

。别这么做我知道您希望将Python代码添加到Fortan程序中,而是使用带有Fortran扩展的Python程序。我的第条建议是要这样做。在数组运算方面,FortranPython快,但是PythonFortran更容易编写,用OOP技术扩展Python代码更容易,Python可以访问对您很重要的库。您提到在Fortran中有个超级优化的主循环;Fortran对于超级优化的内部循环...

weixin_39886238的博客 609

fortran的gui开发 python_我的python学习第三步:Windows系统中Python调用FORTRAN程序的方法...

登录后查看更多精彩内容~您需要 登录 才可以下载或查看,没有帐号?立即注册x本帖最后由 Swallow 于 2017-4-25 14:16 编辑相对气象工作者而言,大多都学习过FORTRAN,所以小伙伴手里大多都有FORTRAN的软件包,为了节省时间,最好是学会利用Python调用现成的FORTRAN软件包,本人还在实践中,正步步学习。网上百度求助,终于迈出了第步。因为手头有现成的老师前辈...

weixin_39901213的博客 436

在win10环境下python调用fortran子程序

1.python调用fortran的接口为f2py,它是numpy自带的模块,在windows下只有分f2py.py,没有f2py.exe;2.在fortran所在的目录下f2py.py -m test -c test.f90,即可生成fortran子程序相应的python文件(.pyd),同时生成个unkown文件夹,改文件夹下有相应的dll文件,将pyddll文件放在块,目前只能在c盘下...

bluelilyfly的博客 5095

Win11 Python调用Julia联合编程入门

在做双目立体匹配方案的时候,想要尝试MPV传播算法,老师那边给到了关于这块的代码,但是.jl文件,需要安装Julia之后在Python调用相关模块。

weixin_43934241的博客 700

Python与Julia结合使用的个人经验

分享下如何PythonJulia之间如何互相导入库的问题。

Terrence_Xu21的博客 7674

Python量化炒股的数据信息获取— 获取上市公司股东股本信息

获取上市公司股东股本信息,即获取上市公司的十大股东信息、十大流通股东信息、股东股份质押信息、股东股份冻结信息、股东户数信息、大股东减持信息上市公司股本变动信息。

Bruce_xiaowei的博客 5704

PyJulia终极指南:Python与Julia混合编程完整教程

🚀 想要在Python中直接调用Julia的高性能科学计算函数吗?PyJulia就是你的完美解决方案!这款强大的工具让你能够无缝地在两种语言之间切换,充分发挥各自优势。本文将为你提供完整的PyJulia安装使用指南,助你轻松掌握混合编程技巧。 ## 为什么选择PyJulia?🤔 PyJulia是连接PythonJulia的桥梁,让你能够: - **直接调用Julia函数** - 在P

gitblog_00135的博客 593

3步掌握AI-Media2Doc:让你的音视频内容键变身专业文档

还在为整理会议录音、视频课程而烦恼吗?AI-Media2Doc是款革命性的开源工具,能够将任何音视频文件智能转化为小红书、公众号、知识笔记等多种风格的文档。无需登录注册,完全本地部署,这款AI工具让内容创作变得前所未有的简单高效。无论你是内容创作者、教育工作者还是企业用户,都能在几分钟内获得专业级文档输出。 ## 🎯 发现价值:为什么你需要AI-Media2Doc? ### 传统内容处理的

gitblog_00551的博客 1056

深入浅出Python量化交易实战--第4章-借助量化交易平台

在这个过程中,小瓦 学会了如何获取股票的概况财务指标数据,也初步了解了如何利用基 本的财务指标进行简单的选股,而且能够查询股东信息股东的增减持 情况,以及某个时期内股票的资金流入/流出情况。既然要进行进步的实验,我们就需要找到更多的数据(仅仅使用 tushare获取的数据够),而让小瓦自己开发个爬虫程 序去各大网站“爬”数据,学习成本又太高,还要花费大量的时间,那小 瓦还如直接用别人已经整理好的数据呢。读者朋友 如果希望查询同字段,则可以参考平台的数据字典,了解查询的具 体方法。

zhh_920509的博客 1900

Win10 Anconda 环境下 Python 调用Julia进行优化求解联合编程环境配置

Python在人工智能领域被广泛应用,但同个项目部分可能需要用到专用的数学优化计算求解,而Python在这类问题上缺少相应的包且计算速度受限。Julia作为新兴面向科学数学计算的语言,支持多种优化求解器,且计算速度相对较快,相关专用数学优化求解方法有可能已在Julia上实现。此时,完全放弃Python而改用Julia必然需要定的时间进行学习,而直接在Python中调用成熟的Julia求解函数解决自己的问题会大大降低工作量。以下是在win10 + Anconda环境下实现Python调用Julia

qq_29068833的博客 1774
上一篇: 用递归与分治策略求解网球循环赛日程表_算法——循环赛日程安排问题
下一篇: python多线程锁_python的多线程编程之锁
weixin_39523529
博客等级 码龄9年 40粉丝 160原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值