如何实现python脚本调用julia函数,julia函数输出结果,赋值给python对象
技术分享
发布于 2024-09-11 20:37:02
查看 7过去629天
一、问题现象
如何实现python脚本调用julia函数,julia函数输出结果,赋值给python对象
二、解决方法 / 步骤
Julia通过PyCall可以很方便地调用Python代码。反过来,Python通过tjc_common、tyjuliacall、julia-numpy等扩展包来实现对Julia的调用(注,上述三个扩展包都是同元公司开发的)。
其中,tjc_common主要是利用JuliaSysimage.dll(或so)文件来加速Julia包导入,tyjuliacall主要用来实现Python对Julia代码的调用,julia-numpy作为tyjuliacall的底层支撑。
1.示例1-内嵌Julia代码
(1)启动Syslab,新建Python文件
(2)写入下方Python代码
from tyjuliacall import Main
from tyjuliacall import JuliaEvaluator
JuliaEvaluator[
r"""mutable struct S
x :: Int
y :: Int
end"""
]
S = JuliaEvaluator["S"]
s = S(1, 2)
print(s.x)
print(s.y)
# 结构体字段
s.x = 10
s.y = 5
print(s.x)
print(s.y)
(3)运行得到结果

2.示例2-调用Julia库函数
(1)启动Syslab,建Python文件
(2)写入以下Python代码
from tjc_common import *
_t0 = time.time()
from tyjuliacall import TySignalProcessing as sp # NOQA: E402
from tyjuliacall import TyPlot as tp # NOQA: E402
print(f"导入同元库耗时: {get_timespan(_t0):.2f} s") # 20.49s(不加速)和2.65s(加速)
import numpy as np
fs = 100
t = np.arange(fs + 1) / fs
print(t)
x = np.sin(2 * np.pi * t*3) + 0.25*np.sin(2 * np.pi * t*40)
# 调用信号库函数
_t0 = time.time()
y = sp.medfilt1(x, 9)
print(f"调用函数耗时: {get_timespan(_t0):.2f} s")
# 调用图形库函数
tp.plot(t, x, t, y)
tp.legend(np.asarray(["Original", "Filtered"]))
tp.plt.show()
(3)运行后得到结果

所属专栏:Julia语言
产品信息:Syslab科学计算环境