julia语言使用PyCall包调用Python代码及Python包

  Julia语言虽然好,但是包管理方面和生态环境感觉还有一点小小的缺陷,但是Julia可以调用Python丰富的包,用起来很方便。

 安装PyCall

  在安装之前先确认下Julia和Python的版本,我使用的稳定版本的 Julia1.6.7,Python版本是 Python3.10.9,并确认好已经下载了需要的Python包,还未下载的可以在终端输入:

pip install matplotlib
pip install sympy
pip install scipy

  使用Julia语言调用Python需要先下载 PyCall 包和 Conda包:

using Pkg
Pkg.add("PyCall")

 PyCall官网:GitHub - JuliaPy/PyCall.jl: Package to call Python functions from the Julia language 官网中一些示例代码是旧版本代码,个别细节需要做一些更改。 

我平时习惯在REPL交互解释器里使用 ] 符号进入包管理模式,随后

add PyCALL
Pkg Conda

 

 

退出包管理模式按一下 删除键 就可以。 

下载完PyCall包后,在Julia终端里配置下Python路径,这里需要定位到python.exe文件。

ENV["PYTHON"] = raw"C:\\GGBond\\your path\\python.exe"

 

随后再Julia终端输入:

Pkg.build("PaCall")

 

  这时候可以在Julia终端进入包管理模式,输入命令查看已安装的Julia包,此时PyCall包已安装完成:

status

 

在包管理模式输入 查看Julia包管理的命令

调用Python代码

 这是可以试用下官网示例代码:

1.调用Python的open函数

 这里和官网使用 @pywith 的版本不一样

using PyCall  #=
调用Python的内置open函数来创建一个.txt文件
使用PyCall提供的字符串宏py"""来执行Python代码 
=#py"""  
with open("GGboy.txt", "w") as f:  f.write("hello mr.Dick")  
"""#=
旧版本代码
@pywith pybuiltin("open")("file.txt","w") as f beginf.write("hello")
end
=#

 生成的文件:

 

2.调用Python的math函数
using PyCall
math = pyimport("math")
a = math.sin(math.pi / 4) # returns ≈ 1/√2 = 0.70710678...
println(a)

 

 3.Julia中定义Python函数或类,并在Julia函数中使用函数
module MyModule  using PyCall  let  py"""  import numpy as np  def one(x):  return np.sin(x) ** 2 + np.cos(x) ** 2  """  global py_one  # 声明一个全局变量来存储Python函数  py_one = py"one"  # 将Python函数赋值给Julia全局变量  
end  two(x) = py_one(x) + py_one(x)  end #=
旧版本代码
module MyModuleusing PyCallfunction __init__()py"""import numpy as npdef one(x):return np.sin(x) ** 2 + np.cos(x) ** 2"""
endtwo(x) = py"one"(x) + py"one"(x)end
=#

 调用Python包

在调用Python包之前先确定好是否已经在Python环境配置好这些包

1.调用numpy
using PyCall  # 执行多行Python代码来定义函数  
py"""  
import numpy as np  def sinpi(x):  return np.sin(np.pi * x)  
"""  # 调用刚才定义的Python函数  
result = py"sinpi(1)"  # 显示结果  
println(result)#=
旧版本代码
py"""
import numpy as npdef sinpi(x):return np.sin(np.pi * x)
"""
py"sinpi"(1)
=#

 

2.调用scipy
using PyCall  so = pyimport("scipy.optimize")  
julia_func(x) = cos(x) - x   
root = so.newton(julia_func, 1.0)  println(root)#=
旧版本代码
so = pyimport("scipy.optimize")
so.newton(x -> cos(x) - x, 1)
=#

3.调用matplotlib
using PyCall  plt = pyimport("matplotlib.pyplot")  x = range(0, stop=2*pi, length=1000)  
y = sin.(3*x .+ 4*cos.(2*x))plt.plot(x, y, color="red", linewidth=2.0, linestyle="--")  plt.show()#=
旧版本代码 
plt = pyimport("matplotlib.pyplot")
x = range(0;stop=2*pi,length=1000); y = sin.(3*x + 4*cos.(2*x));
plt.plot(x, y, color="red", linewidth=2.0, linestyle="--")
plt.show()
=#

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/513552.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于深度学习的人员指纹身份识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 指纹图像预处理与特征提取 4.2 卷积神经网络架构 4.3 特征编码与匹配 4.4 损失函数与训练 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程…

01:HAL库---时钟

一:前言 我们使用的是STM32F103CT86的型号 1:介绍 时钟在在我们的单片机中非常重要,相当于我们的人类的心脏;简单来说,时钟是具有周期性的脉冲信号,最常用的是占空比50%的方波; 三种不同的时钟…

UE5 UE4 开发常用工具AssetDeveTool

AssetDeveTool工具,支持UE5 5.0-.5.3 UE4 4.26/4.27 下载链接: 面包多 https://mbd.pub/o/bread/ZZubkphu 工坊: https://gf.bilibili.com/item/detail/1104960041 包含功能: 自动化批量展UV功能 快速选择功能 自动化批量减面功能…

Docker容器化解决方案

什么是Docker? Docker是一个构建在LXC之上,基于进程容器的轻量级VM解决方案,实现了一种应用程序级别的资源隔离及配额。Docker起源于PaaS提供商dotCloud 基于go语言开发,遵从Apache2.0开源协议。 Docker 自开源后受到广泛的关注和…

07 系统的线性时不变特性

各位看官,大家好!本讲为《数字信号处理理论篇》07 系统的线性时不变特性。(特别提示:课程内容为由浅入深的特性,而且前后对照,不要跳跃观看,请按照文章或视频顺序进行观看。 从本讲开始开始为大…

python | Python 中检查一个数字是否是三态数

本文来源公众号“python”,仅用于学术分享,侵权删,干货满满。 原文链接:Python 中检查一个数字是否是三态数 在数学中,三态数(Triangular Number)是一种特殊的数列,它是由自然数按…

O2O:Online Decision Transformer(ODT)

ICML 2022 paper Introduction 利用Transformer对强化学习进行序列建模在离线强化学习中展露头角,但是无法避免的是这种方法受限于离线数据的质量,因此本文将其结合到online的在线微调过程,进而形成本文ODT。为了解决从offline到online过程…

Pandas基础介绍

文章目录 Pandas简介什么是Pandas?Pandas数据结构Pandas 应用 Pandas简介 什么是Pandas? Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处…

android开发者工具,最新整理

一 Java相关 1.重载函数的签名(区别是否是重载函数) 答:方法名参数类型参数顺序(返回值不是) 2.finalize的工作原理 答:一旦垃圾收集器准备好释放对象占用的存储空间,它首先调用finalize(),而且只有在下一次垃圾收集过程中&#…

Hololens 2应用开发系列(3)——MRTK基础知识及配置文件配置(中)

Hololens 2应用开发系列(3)——MRTK基础知识及配置文件配置(中) 一、前言二、输入系统2.1 MRTK输入系统介绍2.2 输入数据提供者(Input Data Providers)2.3 输入动作(Input Actions)2…

做分析用什么工具

做分析用什么工具 导读 数据分析是数据辅助决策的最后一公里,是最终的数据可视化展示与探索分析的部分,选择使用最适合的数据展示方式,可以帮助分析人员大大提升分析效率。 问题: ● 纠结选择哪个工具 ● 纠结从哪里学起&#x…

Vue.js的双向绑定原理

Vue的双向绑定 vue双向绑定是其最重要的核心亮点,其原理也很简单,这里做个简单总结 vue2的双向绑定是利用的Object.definePropertyvue3的双向绑定是利用的 ES6Porxy中的defineProperty(target, propKey, propDesc 其作用类似于Object.defineProperty …