背景
Python在人工智能领域被广泛应用,但同一个项目一部分可能需要用到专用的数学优化计算求解,而Python在这类问题上缺少相应的包且计算速度受限。Julia作为新兴面向科学数学计算的语言,支持多种优化求解器,且计算速度相对较快,相关专用数学优化求解方法有可能已在Julia上实现。此时,完全放弃Python而改用Julia必然需要一定的时间进行学习,而直接在Python中调用成熟的Julia求解函数解决自己的问题会大大降低工作量。以下是在win10 + Anconda环境下实现Python调用Julia函数进行优化求解联合编程的环境配置方法
环境简介
- Windows 10 + Anconda (python 3.8)
- Julia 1.7.1
- PyJulia (关键)
Julia 安装
https://julialang.org/downloads/
国内:
https://cn.julialang.org/downloads/
下载最新版本(我的是1.7.1)可以跳过系统环境变量配置过程,之前的版本需要自行配置系统环境变量,否则Anconda环境无法找到Julia程序。安装完成后可在开始菜单找到Julia并启动终端
PyJulia 安装配置
在自己的Anconda Python 环境下,安装PyJulia。 参考:https://pyjulia.readthedocs.io/en/latest/installation.html
- 安装PyJulia
pip install julia
##离线方式,安装开发版本
$ git clone https://github.com/JuliaPy/pyjulia
$ cd pyjulia
$pip install
或
$pip install -e .
- 安装PyJulia 所依赖的Julia包
启动Anconda终端模式(conda activate env_name); 进入后,开启一个python REPL
>>> import julia
>>> julia.install()
- 测试
在python 终端输入模式下导入Julia 包并运行简单计算程序,不报错并有正确的结果输出即安装成功
>>> from julia import Base
>>> from julia import Main
>>> Main.xs = [1, 2, 3]
>>> Main.eval("sin.(xs)")
Spyder 命令行终端执行结果:
在Python 程序中调用Julia函数程序
from julia import Main as self_Main ##导入Julia 包 self_Main 是为了和Main函数区分开,可自己定义名称
self_Main.include("self_function.jl") ##加载自己的Julia函数文件
call_back_str = "Opt_(Arg1, Arg2, Arg3)" ##构建函数调用字符串,传递参数
#↑ Opt_: self_function.jl文件中自己要调用的函数名, Arg1, Arg2, Arg3 为向函数传递的参数,整体要转化为一条字符串
out_1,out_2 = self_Main.eval(call_back_str) ##传递参数并执行Julia 函数及返回结果
最后,根据自己需要解析输出结果。注意:Python调用Julia 函数文件时会执行整个文件非函数部分会自动执行,但不返回结果,程序执行过程中中间打印操作失效。Julia程序调试须在Julia终端中进行。