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 相关文章推荐
python正则表达式中的括号匹配问题
Dec 14 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
Feb 18 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
Mar 02 Python
tensorflow实现KNN识别MNIST
Mar 12 Python
python调用c++传递数组的实例
Feb 13 Python
Python中按值来获取指定的键
Mar 04 Python
Pytorch 实现自定义参数层的例子
Aug 17 Python
PyCharm GUI界面开发和exe文件生成的实现
Mar 04 Python
python解析xml文件方式(解析、更新、写入)
Mar 05 Python
Python基于gevent实现高并发代码实例
May 15 Python
Python3 socket即时通讯脚本实现代码实例(threading多线程)
Jun 01 Python
python 模拟登录B站的示例代码
Dec 15 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
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
2011/03/28 PHP
PHP垃圾回收机制引用计数器概念分析
2013/06/24 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
2014/07/15 PHP
PHP使用两个栈实现队列功能的方法
2018/01/15 PHP
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
使用jquery实现简单的ajax
2013/07/08 Javascript
jQuery通过Ajax返回JSON数据
2015/04/28 Javascript
jQuery实现的多屏图像图层切换效果实例
2015/05/07 Javascript
AngularJS 实现按需异步加载实例代码
2015/10/18 Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
2016/03/09 Javascript
VueJs与ReactJS和AngularJS的异同点
2016/12/12 Javascript
Node.js连接postgreSQL并进行数据操作
2016/12/18 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
2017/01/17 Javascript
jQuery用noConflict代替$的实现方法
2017/04/12 jQuery
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
JS模拟超市简易收银台小程序代码解析
2017/08/18 Javascript
jquery如何实现点击空白处隐藏元素
2017/12/05 jQuery
分析javascript原型及原型链
2018/03/18 Javascript
脚手架vue-cli工程webpack的作用和特点
2018/09/29 Javascript
websocket4.0+typescript 实现热更新的方法
2019/08/14 Javascript
vue.js实现三级菜单效果
2019/10/19 Javascript
python文本数据相似度的度量
2018/03/12 Python
Python实现疫情通定时自动填写功能(附代码)
2020/05/27 Python
浅谈sklearn中predict与predict_proba区别
2020/06/28 Python
HTML5地理定位实例
2014/10/15 HTML / CSS
美国一家著名的儿童鞋制造商:Stride Rite
2017/01/02 全球购物
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
波兰最大的儿童服装连锁店之一:5.10.15.
2018/02/11 全球购物
波兰灯具、照明和LED购物网站:Lampy.pl
2019/03/11 全球购物
销售文员岗位职责
2013/11/29 职场文书
具结保证书
2015/01/17 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
未来,这5大方向都很适合创业
2019/07/22 职场文书
node.js如何自定义实现一个EventEmitter
2021/07/16 Javascript
Python pandas之求和运算和非空值个数统计
2021/08/07 Python
排查Tomcat进程假死的问题
2022/05/06 Servers