Python 核心技术与实战
景霄
Facebook 资深工程师
114324 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
开篇词 (1讲)
Python 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

加餐 | 带你上手SWIG:一份清晰好用的SWIG编程实践指南

《高级C/C++编译技术》
《C++ Primer》
SWIG文档
映射
向量
字符串
指针和引用
Enumeration
常量
全局变量
生成动态库
编写接口文件
编写utils.cpp
编写utils.h
编写具体实现
编写头文件定义
使用第三方库Armadillo
创建一个简单的例子
编译相关组件
下载源代码包
R
Scilab
Octave
OCaml
Lua
Java
Go语言
D
C#
Ruby
Tcl
PHP
Perl
JavaScript
Python
学习素材
深入C++
官方文档
SWIG C++常用工具
通过SWIG封装基于C++编写的Python模块
准备SWIG
使用Python编写的PCA算法
通过SWIG实现用Python调用C/C++库
支持的目标语言
连接C/C++与多种高级编程语言的软件开发工具
学习路径
使用Python实现PCA算法
是什么?
SWIG

该思维导图由 AI 生成,仅供参考

你好,我是卢誉声,Autodesk 数据平台和计算平台资深软件工程师,也是《移动平台深度神经网络实战》和《分布式实时处理系统:原理架构与实现》的作者,主要从事 C/C++、JavaScript 开发工作和平台架构方面的研发工作,对 SWIG 也有比较深的研究。很高兴受极客时间邀请来做本次分享,今天,我们就来聊一聊 SWIG 这个话题。
我们都知道,Python 是一门易于上手并实验友好的胶水语言。现在有很多机器学习开发或研究人员,都选择 Python 作为主力编程语言;流行的机器学习框架也都会提供 Python 语言的支持作为调用接口和工具。因此,相较于学习成本更高的 C++ 来说,把 Python 作为进入机器学习世界的首选编程语言,就再合适不过了。
不过,像 TensorFlow 或 PyTorch 这样的机器学习框架的核心,是使用 Python 编写的吗?
显然不是。这里面的原因比较多,但最为显著的一个原因就是“性能”。通过 C++ 编写的机器学习框架内核,加上编译器的优化能力,为系统提供了接近于机器码执行的效率。这种得天独厚的优势,让 C++ 在机器学习的核心领域站稳了脚跟。我们前面所说的 TensorFlow 和 PyTorch 的核心,便都是使用 C/C++ 开发的。其中,TensorFlow 的内核,就是由高度优化的 C++ 代码和 CUDA 编写而成。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何使用SWIG对C++程序进行Python封装,以实现Python对C++代码的调用。作者首先介绍了Python在机器学习领域的应用,以及C++在机器学习框架核心的重要性。然后详细讲解了SWIG的作用和使用方法,并给出了一个使用Python编写的PCA算法示例。接着,作者介绍了SWIG的准备工作,包括下载源代码包、构建、编写接口定义文件和测试Python脚本。最后,作者演示了如何通过SWIG实现Python对C++函数接口的调用。整篇文章以实际操作为主,详细介绍了SWIG的使用方法,对于想要了解如何使用SWIG进行Python对C++代码的调用的读者来说,是一份清晰好用的编程实践指南。文章内容涉及了SWIG的基本概念、Python与C++的交互、以及机器学习领域的实际应用,对于对跨语言开发和机器学习感兴趣的读者具有很高的参考价值。文章还提供了具体的实现代码和测试结果,帮助读者更好地理解和应用所学知识。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Python 核心技术与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(8)

  • 最新
  • 精选
  • gutentag
    对于单文件而言,用SWIG还是boost.python/py++感觉都好理解和实践,请问对于依赖关系复杂的大型C++项目(比如OpenCV, OpenSceneGraph之类的)的python binding有没有比较完整的最佳实践呢? C++编译的动态库python无法直接调用,C++项目的python binding本身等价于把本身编译时用到的所有的头文件中需要暴露的接口都extern成C的呢?对于头文件的相互各种include一般是人工处理还是SWIG本身可以解决呢?除了头文件暴露以外,还有别的工作吗? 任何C项目直接生成的动态链接库python都能直接import吗?请问有例外吗? 谢谢
    2019-08-16
    1
    10
  • 许童童
    极客时间的C++课程快来了,期待一下,补一补我的C++。
    2019-08-16
    1
    6
  • 安排
    类似于jni啊
    2019-08-16
    5
  • Ethan
    c++大法
    2019-08-16
    4
  • Felix
    老师,实际使用中遇到个问题,想请教下您: 假如有这么一个C++函数:ErrCode GetTpError(std::string& errMsg); 用于获取错误信息,想要在python中调用,利用swig编译OK,但调用后没有得到 errMsg字符串,原因是python的字符串类型是immutable,不知道我这样理解对吗?还有这个函数要怎么转换,才能在python中调用呢?
    2020-03-17
    2
  • -.----..
    感觉SWIG更灵活,比ctypes和py4j更方便,但是Python调用.so文件好像很挑gcc版本,不同版本gcc编译的.so文件,Python调用时有时候会报
    2019-08-20
    1
    2
  • 好好先生
    加油!
    2020-03-29
    1
  • 栾~龟虽寿!
    如何看python源代码,比如list.sort的实现
    2019-08-18
    1
收起评论
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部