python 通过 pybind11 使用Eigen加速代码的步骤


Posted in Python onDecember 07, 2020

python是很容易上手的编程语言,但是有些时候使用python编写的程序并不能保证其运行速度(例如:while 和 for),这个时候我们就需要借助c++等为我们的代码提速。下面是我使用pybind11调用c++的Eigen库的简单介绍:

第一步:准备系统和IDE:

Windows 10 
vs2015 (用于调试c++代码)
vscode (调试python代码)

第二步:python虚拟环境:

1.创建虚拟python虚拟环境: 在vscode的terminal中执行 

python -m venv env

2.下载 Eigen: 将Eigen解压到当前目录命名为 eigen-3.3.8
3.在vscode的terminal中激活虚拟环境:

 ./env/Scripts/Activate.ps1

python 通过 pybind11 使用Eigen加速代码的步骤

4.安装pybind11:

pip install pybind11

5.安装numpy==1.19.3(使用1.19.4可能会有问题)

pip install numpy==1.19.3 

第三步:使用vs2015编写cpp_python.cpp, 并保证没有bug

#include <Eigen/Dense>
using namespace std
using namespace Eigen
MatrixXd add_mat(MatrixXd A_mat, MatrixXd B_mat)
{
  return A_mat + B_mat;
}

第四步:使用pybind11为cpp_python.cpp添加python接口

// cpp_python.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <pybind11/pybind11.h>
#include <pybind11/eigen.h>
#include<pybind11/numpy.h>
#include<fstream>
#include<iostream>
#include <Eigen/Dense>
using namespace std;
using namespace Eigen;
 
MatrixXd add_mat(MatrixXd A_mat, MatrixXd B_mat)
{
    return A_mat + B_mat;
}
 
namespace py = pybind11;
PYBIND11_MODULE(add_mat_moudle, m)
{
    m.doc() = "Matrix add";//解释说明
    m.def("mat_add_py"/*在pyhon中使用的函数名*/, &add_mat);
}

第五步:设置setup.py用来编译c++代码

from setuptools import setup
from setuptools import Extension

add_mat_module = Extension(name='add_mat_moudle', # 模块名称
              sources=['cpp_python.cpp'],  # 源码
              include_dirs=[r'.\eigen-3.3.8',
                    r'.\env\Scripts',   # 依赖的第三方库的头文件
                     r'.\env\Lib\site-packages\pybind11\include']
              )

setup(ext_modules=[add_mat_module])

第六步:编译测试

python 通过 pybind11 使用Eigen加速代码的步骤

注意:我的cpp_python.cpp和setup.py是在同一个文件夹下。

执行: "python .\setup.py build_ext --inplace"就会得下面的结果,生成.pyd文件表明我们已经编译成功。

python 通过 pybind11 使用Eigen加速代码的步骤

运行测试:

python 通过 pybind11 使用Eigen加速代码的步骤

以上就是python 通过 pybind11 使用Eigen加速代码的步骤的详细内容,更多关于python 加速代码的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python抓取京东商城手机列表url实例代码
Dec 18 Python
分享一个常用的Python模拟登陆类
Mar 29 Python
python中matplotlib实现最小二乘法拟合的过程详解
Jul 11 Python
Python单元测试unittest的具体使用示例
Dec 17 Python
python 返回一个列表中第二大的数方法
Jul 09 Python
Python企业编码生成系统之主程序模块设计详解
Jul 26 Python
python实现数据清洗(缺失值与异常值处理)
Dec 02 Python
pytorch实现用CNN和LSTM对文本进行分类方式
Jan 08 Python
matplotlib对象拾取事件处理的实现
Jan 14 Python
使用python如何删除同一文件夹下相似的图片
May 07 Python
总结Python常用的魔法方法
May 25 Python
Python用any()函数检查字符串中的字母以及如何使用all()函数
Apr 14 Python
Python中BeautifulSoup通过查找Id获取元素信息
Dec 07 #Python
BeautifulSoup中find和find_all的使用详解
Dec 07 #Python
python爬虫beautifulsoup解析html方法
Dec 07 #Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
Dec 07 #Python
用ldap作为django后端用户登录验证的实现
Dec 07 #Python
Django中使用Celery的方法步骤
Dec 07 #Python
python集合的新增元素方法整理
Dec 07 #Python
You might like
php实现递归与无限分类的方法
2015/02/16 PHP
php实现将数组转换为XML的方法
2015/03/09 PHP
jQuery的load()方法及其回调函数用法实例
2015/03/25 Javascript
bootstrap学习笔记之初识bootstrap
2016/06/21 Javascript
JavaScript兼容浏览器FF/IE技巧
2016/08/14 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
2016/08/31 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
2017/02/16 Javascript
node.js程序作为服务并在windows下开机自启动(用forever)
2017/03/29 Javascript
angular实现图片懒加载实例代码
2017/06/08 Javascript
关于JavaScript中的this指向问题总结篇
2017/07/23 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
JS中的回调函数实例浅析
2018/03/21 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
2018/08/31 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
Vue分页插件的前后端配置与使用
2019/10/09 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
微信小程序可滑动周日历组件使用详解
2019/10/21 Javascript
vue实现广告栏上下滚动效果
2020/11/26 Vue.js
[52:36]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python中处理字符串的相关的len()方法的使用简介
2015/05/19 Python
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
2016/07/11 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
2019/05/15 Python
如何使用Python 打印各种三角形
2019/06/28 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
python实现跨年表白神器--你值得拥有
2021/01/04 Python
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
2013/01/31 HTML / CSS
营销主管自我评价怎么写
2013/09/19 职场文书
客服工作职责
2013/12/11 职场文书
小露珠教学反思
2014/04/30 职场文书
商业计算机应用专业自荐书
2014/06/09 职场文书
开展读书活动总结
2014/06/30 职场文书
学生夜不归宿检讨书
2014/09/23 职场文书
销售员未完成销售业绩的检讨书
2014/10/12 职场文书
2015年教师节贺卡寄语
2015/03/24 职场文书
困难补助申请报告
2015/05/19 职场文书
Python中 range | np.arange | np.linspace三者的区别
2022/03/22 Python