python3 通过 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

4.安装pybind11: 

pip install pybind11

安装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])

第六步:编译测试

这是我当前的工作目录

python3 通过 pybind11 使用Eigen加速代码的步骤详解

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

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

python3 通过 pybind11 使用Eigen加速代码的步骤详解

运行测试:

python3 通过 pybind11 使用Eigen加速代码的步骤详解

到此这篇关于python3 通过 pybind11 使用Eigen加速代码的步骤详解的文章就介绍到这了,更多相关python3 pybind11 Eigen加速代码内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Windows下安装python2.7及科学计算套装
Mar 05 Python
Python的字典和列表的使用中一些需要注意的地方
Apr 24 Python
Django框架下在URLconf中指定视图缓存的方法
Jul 23 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
Jan 30 Python
pandas 条件搜索返回列表的方法
Oct 30 Python
python语言元素知识点详解
May 15 Python
阿里云ECS服务器部署django的方法
Aug 29 Python
DJango的创建和使用详解(默认数据库sqlite3)
Nov 18 Python
django 实现手动存储文件到model的FileField
Mar 30 Python
python获取linux系统信息的三种方法
Oct 14 Python
Python将QQ聊天记录生成词云的示例代码
Feb 10 Python
python关于集合的知识案例详解
May 30 Python
python 通过 pybind11 使用Eigen加速代码的步骤
Dec 07 #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
You might like
如何在symfony中导出为CSV文件中的数据
2011/10/06 PHP
QQ互联一键登录审核不通过的解决方案
2014/09/10 PHP
最新版本PHP 7 vs HHVM 多角度比较
2016/02/14 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
2016/09/11 PHP
THINKPHP截取中文字符串函数实例代码
2017/03/20 PHP
javascript学习笔记(五)正则表达式
2011/04/08 Javascript
读jQuery之九 一些瑕疵说明
2011/06/21 Javascript
JavaScript高级程序设计阅读笔记(六) ECMAScript中的运算符(二)
2012/02/27 Javascript
jQuery+JSON+jPlayer实现QQ空间音乐查询功能示例
2013/06/17 Javascript
使用jquery插件qrcode生成二维码
2015/10/22 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
js css+html实现简单的日历
2016/07/14 Javascript
基于JavaScript实现Tab选项卡切换效果
2016/11/24 Javascript
一个有意思的鼠标点击文字特效jquery代码
2017/09/23 jQuery
JS中原始值和引用值的储存方式示例详解
2018/03/23 Javascript
基于node简单实现RSA加解密的方法步骤
2019/03/21 Javascript
vue+element实现表格新增、编辑、删除功能
2019/05/28 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
[02:57]2014DOTA2国际邀请赛 选手辛苦解说更辛苦
2014/07/10 DOTA
[02:59]DOTA2完美大师赛主赛事第三日精彩集锦
2017/11/25 DOTA
[48:51]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第一场 11.28
2020/12/02 DOTA
Python的字典和列表的使用中一些需要注意的地方
2015/04/24 Python
python通过链接抓取网站详解
2019/11/20 Python
Python中的面向接口编程示例详解
2021/01/17 Python
python实现学生信息管理系统源码
2021/02/22 Python
美国特价机票专家:Airfarewatchdog
2018/01/24 全球购物
2019年Java面试必问之经典试题
2012/09/12 面试题
如何查找和删除数据库中的重复数据
2014/11/05 面试题
物业保安员岗位职责制度
2014/01/30 职场文书
音乐教学案例
2014/01/30 职场文书
工作时间上网检讨书
2014/02/03 职场文书
2014年食品安全工作总结
2014/12/04 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
《金钱的魔力》教学反思
2016/02/20 职场文书
2016学雷锋优秀志愿者事迹材料
2016/02/25 职场文书