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版
Dec 07 Python
python中类和实例如何绑定属性与方法示例详解
Aug 18 Python
Tensorflow 实现修改张量特定元素的值方法
Jul 30 Python
tensorflow: variable的值与variable.read_value()的值区别详解
Jul 30 Python
Python设计模式之观察者模式原理与用法详解
Jan 16 Python
python实现抖音点赞功能
Apr 07 Python
pytorch中的自定义反向传播,求导实例
Jan 06 Python
详解python 降级到3.6终极解决方案
Feb 06 Python
python数据分析工具之 matplotlib详解
Apr 09 Python
使用npy转image图像并保存的实例
Jul 01 Python
python 爬取小说并下载的示例
Dec 07 Python
python 使用pandas读取csv文件的方法
Dec 24 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
150kHz到30Mhz完全冲浪手册
2020/03/20 无线电
使用PHP制作新闻系统的思路
2006/10/09 PHP
PHP开发的一些注意点总结
2010/10/12 PHP
php 变量未定义等错误的解决方法
2011/01/12 PHP
ThinkPHP中的三大自动简介
2014/08/22 PHP
javascript数组与php数组的地址传递及值传递用法实例
2015/01/22 PHP
PHP简单操作MongoDB的方法(安装及增删改查)
2016/05/26 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
PHP数组实际占用内存大小原理解析
2020/12/11 PHP
var与Javascript变量隐式声明
2009/09/17 Javascript
学习ExtJS 访问容器对象
2009/10/07 Javascript
js里怎么取select标签里的值并修改
2012/12/10 Javascript
关于jquery input textare 事件绑定及用法学习
2013/04/03 Javascript
jQuery文本框(input textare)事件绑定方法教程
2013/04/24 Javascript
jquery实现左右滑动菜单效果代码
2015/08/27 Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
2016/06/22 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
2016/07/07 Javascript
JS定时检测任务任务完成后执行下一步的解决办法
2016/12/22 Javascript
node文字生成图片的示例代码
2017/10/26 Javascript
通过一个简单的例子学会vuex与模块化
2017/11/22 Javascript
jQuery 实现左右两侧菜单添加、移除功能
2018/01/02 jQuery
新手快速入门微信小程序组件库 iView Weapp
2019/06/24 Javascript
uploadify插件实现多个图片上传并预览
2019/09/30 Javascript
vue路由 遍历生成复数router-link的例子
2019/10/30 Javascript
浅析Vue 中的 render 函数
2020/02/28 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
[26:50]2018完美盛典DOTA2表演赛
2018/12/17 DOTA
Python对列表中的各项进行关联详解
2017/08/15 Python
python实现多张图片拼接成大图
2019/01/15 Python
Python中format()格式输出全解
2019/04/12 Python
Python中调用其他程序的方式详解
2019/08/06 Python
Foot Locker意大利官网:全球领先的运动鞋和服装零售商
2017/05/30 全球购物
施工资料员的岗位职责
2013/12/22 职场文书
擅自离岗检讨书
2014/02/11 职场文书
文明家庭事迹材料
2014/12/20 职场文书
孟佩杰观后感
2015/06/17 职场文书