Julia系列16:Julia与python/c互调

这篇具有很好参考价值的文章主要介绍了Julia系列16:Julia与python/c互调。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 Julia调用python

通过PyCall包,Julia可以直接调用Python包。例如:

using PyCall
np= pyimport("numpy")
x = np.linspace(1, 10, 10)

数值、布尔、字符串、IO stream、函数、元组、数组或列表、以及包含这些类型的字典等,它们都会自动进行类型的转换(Python函数会被转换或传递为Julia的函数,反之亦然)。其它类型则是通过通用的PyObject提供的。

2 python调用julia

首先pip install Julia安装包,然后使用下面的代码调用:

from julia.api import Julia
jl = Julia(compiled_modules=False)
jl.eval(open("testJulia.jl").read()) # 简单的julia代码可以直接写在这里面
from julia import Main
Main.function(...)

下面是将julia代码用python的fastapi封装的例子:

from fastapi import FastAPI, Request
from julia.api import Julia
jl = Julia(compiled_modules=False)
jl.eval(open("solve.jl").read())
from julia import Main
from typing import Any
app = FastAPI()
@app.post("/solve")
async def root(request:Request):
    data = eval(await request.body())
    res = Main.solve(data)
    return {"status":"OK","result":res}

if __name__ == '__main__':
    import uvicorn
    uvicorn.run(app="solve:app", host="127.0.0.1", port=8001)

发送的post请求为

resp = HTTP.post("https://0.0.0.0/solve", [], JSON3.write(data),  require_ssl_verification = false)
println(resp)

可以使用python来安装Julia环境:

pip install jill -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install julia -i https://pypi.tuna.tsinghua.edu.cn/simple
jill install --confirm 
export JULIA_PKG_SERVER=https://mirrors.cernet.edu.cn/julia
julia -e "import Pkg; Pkg.add(\"HiGHS\");Pkg.add(\"JuMP\")"

3 Julia调用c

下面是调用c函数的例子。

t - ccall((:clock, "libc"), Int32, ()) # 调用C的clock函数
t = @ccall clock()::Int32 # 简化调用方法,需要注明返回类型

下面是一个调用c库的例子:

#include <stdio.h>

int print_y(int y)
{
    printf("got y = %d.\n", y);
    return y+10;
}

编译:gcc -fPIC -shared -o mylib.so mylib.c
在Julia中调用:文章来源地址https://www.toymoban.com/news/detail-803501.html

@ccall "./mylib.so".print_y((-5)::Cint)::Cint

到了这里,关于Julia系列16:Julia与python/c互调的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • EM3DANI包详解:使用Julia语言进行3D频域电磁数据建模的终极指南

    第一部分:EM3DANI包的简介与安装 1. EM3DANI包简介 EM3DANI是一个强大的工具包,专门为那些希望使用Julia语言进行频域电磁(CSEM和MT)数据的3D建模的研究者和开发者设计。它支持各向同性和各向异性建模,使得用户可以更加灵活地进行电磁数据的模拟和分析。 频域电磁(CSEM和

    2024年02月07日
    浏览(40)
  • 用julia演示蝴蝶效应:洛伦兹吸引子

    蝴蝶效应的名字来源于蝴蝶扇动翅膀的动作,虽然这个动作微小,但可能会在数周后引起飓风等极端天气的发生。这种现象表明,微小的变化可能会被放大并产生非线性的结果。这个概念最早由美国气象学家爱德华·洛伦兹提出的。 Lorentz吸引子堪称是微分方程组的经典入门案

    2024年01月21日
    浏览(45)
  • 【python】16.Python语言进阶

    重要知识点 生成式(推导式)的用法 说明:生成式(推导式)可以用来生成列表、集合和字典。 嵌套的列表的坑 Python Tutor - VISUALIZE CODE AND GET LIVE HELP heapq 模块(堆排序) itertools 模块 collections 模块 常用的工具类: namedtuple :命令元组,它是一个类工厂,接受类型的名称和

    2024年01月17日
    浏览(35)
  • Python系列(16)—— string类型转float类型

    Python中String类型转Float类型 方法1:使用 float() 函数 Python内置了 float() 函数,它可以直接将字符串转换为浮点数。如果字符串不能转换为浮点数,该函数将引发 ValueError 异常。 方法2:使用 ast.literal_eval() 函数 ast.literal_eval() 函数比 eval() 更安全,因为它只允许处理Python字面量结

    2024年02月21日
    浏览(41)
  • Python生成高级圣诞树-代码案例剖析【第16篇—python圣诞节系列】

    这段代码是使用turtle库创建一个图形界面,绘制了一组彩色的正方形和圆形,最终呈现出一幅图案。以下是对代码的解析: 屏幕=。屏幕() :创建了一个Turtle屏幕对象。 screen.setup(375, 700) :设置屏幕大小为375x700像素。 圆圈=。() :创建了一个Turtle对象,命名为circle。 c

    2024年02月03日
    浏览(82)
  • Flutter 父子组件互调方法

    使用 GlobalKey:可以为子组件创建一个 GlobalKey 对象,通过该 GlobalKey 可以获取到子组件的状态,并调用其方法。 在 Flutter 中,子组件可以通过回调函数的方式来调用父组件的方法。

    2024年02月11日
    浏览(33)
  • Android基于JNI的Java与C++互调

    java调用C++: //导出c函数格式 extern \\\"C\\\" JNIEXPORT //供JNI调用  JNICALL 函数名格式 Java_包名_类名_函数名(包名.替换为_) Java_com_example_getapplist_MainActivity_stringFromJNI    包名:com_example_getapplist   类名:MainActivity.      函数名:stringFromJNI C++ Jni  CMakeList.txt  

    2024年02月10日
    浏览(38)
  • 【Python入门系列】第十八篇:Python自然语言处理和文本挖掘

    Python自然语言处理(Natural Language Processing,简称NLP)和文本挖掘是一门涉及处理和分析人类语言的学科。它结合了计算机科学、人工智能和语言学的知识,旨在使计算机能够理解、解释和生成人类语言。 NLTK(Natural Language Toolkit):它是Python中最受欢迎的NLP库之一,提供了丰

    2024年02月15日
    浏览(63)
  • Python系列(1):简洁优雅,功能强大的编程语言

    在当今的编程世界中,Python已经成为了一种无处不在的语言。它不仅简单易学,而且功能强大,支持多种编程范式,包括面向对象编程、函数式编程和过程式编程。本篇文章将深入探讨Python的特性和应用领域。 简洁的语法 :Python的语法清晰、简洁,使得代码易于阅读和编写

    2024年01月21日
    浏览(56)
  • 深入了解5G终端射频标准中的频谱发射与互调特性

    前面的频谱发射我们已经学习了占用带宽、带外发射和杂散发射,今天是频谱发射的最后一部分内容: 互调 。在很多的标准规范中,都有互调测试的相关内容,但测试条件、测试要求和测试方法都不尽相同。我们可以不必纠结互调是否有某种固定的说法,而是关注和了解它

    2024年01月25日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包