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 26 Python
Tensorflow卷积神经网络实例进阶
May 24 Python
Django进阶之CSRF的解决
Aug 01 Python
python爬取基于m3u8协议的ts文件并合并
Apr 26 Python
Django数据库类库MySQLdb使用详解
Apr 28 Python
Python简易版图书管理系统
Aug 12 Python
python3 实现的对象与json相互转换操作示例
Aug 17 Python
解决Atom安装Hydrogen无法运行python3的问题
Aug 28 Python
使用 Python 写一个简易的抽奖程序
Dec 08 Python
只需要这一行代码就能让python计算速度提高十倍
May 24 Python
Pandas数据结构之Series的使用
Mar 31 Python
利用Python脚本写端口扫描器socket,python-nmap
Jul 23 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新手入门学习方法
2011/05/08 PHP
探讨GDFONTPATH能否被winxp下的php支持
2013/06/21 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
2014/01/07 PHP
php实现在多维数组中查找特定value的方法
2015/07/29 PHP
PHP实现清除wordpress里恶意代码
2015/10/21 PHP
详解WordPress中简码格式标签编写的基本方法
2015/12/22 PHP
深入解析PHP的Yii框架中的event事件机制
2016/03/17 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
js类中获取外部函数名的方法与代码
2007/09/12 Javascript
&amp;lt;script defer&amp;gt; defer 是什么意思
2009/05/10 Javascript
javascript 得到变量类型的函数
2010/05/19 Javascript
jQuery实现的导航条切换可显示隐藏
2014/10/22 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
jQuery中[attribute=value]选择器用法实例
2014/12/31 Javascript
简单谈谈javascript中this的隐式绑定
2016/02/22 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
2016/12/08 Javascript
JavaScript中的高级函数
2018/01/04 Javascript
vue和better-scroll实现列表左右联动效果详解
2019/04/29 Javascript
Vue+iview+webpack ie浏览器兼容简单处理
2019/09/20 Javascript
jQuery HTML设置内容和属性操作实例分析
2020/05/20 jQuery
python+ffmpeg视频并发直播压力测试
2018/03/06 Python
Python利用正则表达式实现计算器算法思路解析
2018/04/25 Python
Python Web编程之WSGI协议简介
2018/07/18 Python
wxpython布局的实现方法
2019/11/01 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
2021/01/28 Python
html5的画布canvas——画出弧线、旋转的图形实例代码+效果图
2013/06/09 HTML / CSS
HTML5 canvas实现移动端上传头像拖拽裁剪效果
2016/03/14 HTML / CSS
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
标准化管理实施方案
2014/02/25 职场文书
软件毕业生个人鉴定
2014/03/03 职场文书
机关单位保密工作责任书
2015/05/11 职场文书
2015大学生暑假调查报告
2015/07/13 职场文书
高中运动会前导词
2015/07/20 职场文书
初中政教处工作总结
2015/08/12 职场文书