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采集博客中上传的QQ截图文件
Jul 18 Python
python导入时小括号大作用
Jan 10 Python
利用python爬取斗鱼app中照片方法实例
Dec 03 Python
详解Python中的动态属性和特性
Apr 07 Python
pycharm的console输入实现换行的方法
Jan 16 Python
python 基于TCP协议的套接字编程详解
Jun 29 Python
Python流程控制 while循环实现解析
Sep 02 Python
python实现通过队列完成进程间的多任务功能示例
Oct 28 Python
基于Tensorflow使用CPU而不用GPU问题的解决
Feb 07 Python
python修改linux中文件(文件夹)的权限属性操作
Mar 05 Python
Django media static外部访问Django中的图片设置教程
Apr 07 Python
Python SQLAlchemy库的使用方法
Oct 13 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
一个程序下载的管理程序(二)
2006/10/09 PHP
php实现递归的三种基本方式
2020/07/04 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
2017/02/25 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
php微信公众号开发之关键词回复
2018/10/20 PHP
Array.slice()与Array.splice()的返回值类型
2006/10/09 Javascript
ExtJS 2.2.1的grid控件在ie6中的显示问题
2009/05/04 Javascript
js中escape对应的C#解码函数 UrlDecode
2012/12/16 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
2013/12/14 Javascript
node.js中的buffer.slice方法使用说明
2014/12/10 Javascript
Javascript通过overflow控制列表闭合与展开的方法
2015/05/15 Javascript
深入理解jquery的$.extend()、$.fn和$.fn.extend()
2017/07/08 jQuery
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
微信小程序wx.uploadfile 本地文件转base64的实现代码
2018/06/28 Javascript
js实现轮播图的完整代码
2020/10/26 Javascript
vuejs+element UI table表格中实现禁用部分复选框的方法
2019/09/20 Javascript
前端开发之便利店收银系统代码
2019/12/27 Javascript
JS Web Flex弹性盒子模型代码实例
2020/03/10 Javascript
微信小程序向Java后台传输参数的方法实现
2020/12/10 Javascript
python操作摄像头截图实现远程监控的例子
2014/03/25 Python
使用Python中的cookielib模拟登录网站
2015/04/09 Python
python爬虫之BeautifulSoup 使用select方法详解
2017/10/23 Python
Sanic框架路由用法实例分析
2018/07/16 Python
python设置代理和添加镜像源的方法
2020/02/14 Python
python实现控制台输出彩色字体
2020/04/05 Python
深入浅析CSS3中的Flex布局整理
2020/04/27 HTML / CSS
HTML5移动开发图片压缩上传功能
2016/11/09 HTML / CSS
英国最大的专业户外零售商:Mountain Warehouse
2018/06/06 全球购物
中职应届生会计求职信
2013/10/23 职场文书
平安工地建设方案
2014/05/06 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
老公婚前保证书
2015/02/28 职场文书
高校自主招生教师推荐信
2015/03/23 职场文书
紧急迫降观后感
2015/06/15 职场文书
小学六一儿童节活动开幕词
2016/03/04 职场文书