专栏
标签
如何实现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)运行得到结果
image.png
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)运行后得到结果
image.png

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

全部回答

暂无数据
暂无数据
用户
和原帖交流更多问题细节吧,去
我要发帖 我要发帖
资料中心 资料中心
查看更多>
热门帖子 热门帖子
主要贡献者 主要贡献者
过去7天