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 cookielib 登录人人网的实现代码
Dec 19 Python
python+matplotlib实现礼盒柱状图实例代码
Jan 16 Python
python模块之paramiko实例代码
Jan 31 Python
python样条插值的实现代码
Dec 17 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
Apr 09 Python
python函数的作用域及关键字详解
Aug 20 Python
pyinstaller打包程序exe踩过的坑
Nov 19 Python
python深copy和浅copy区别对比解析
Dec 26 Python
如何基于Django实现上下文章跳转
Sep 16 Python
Python实现EM算法实例代码
Oct 04 Python
Python编写冷笑话生成器
Apr 20 Python
python中filter,map,reduce的作用
Jun 10 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
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
PHP遍历目录并返回统计目录大小
2014/06/09 PHP
php实现简单的语法高亮函数实例分析
2015/04/27 PHP
UTF-8正则表达式如何匹配汉字
2015/08/03 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
JS中==与===操作符的比较
2009/03/21 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
JSONP获取Twitter和Facebook文章数的具体步骤
2014/02/24 Javascript
在JavaScript中判断整型的N种方法示例介绍
2014/06/18 Javascript
推荐9款炫酷的基于jquery的页面特效
2014/12/07 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
PHP结合jQuery实现的评论顶、踩功能
2015/07/22 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
2016/11/03 Javascript
JavaScript常用截取字符串的三种方式用法区别实例解析
2018/05/15 Javascript
详解webpack2异步加载套路
2018/09/14 Javascript
javascript实现5秒倒计时并跳转功能
2019/06/20 Javascript
JavaScript装饰者模式原理与用法实例详解
2020/03/09 Javascript
在vue中使用Echarts画曲线图的示例
2020/10/03 Javascript
python中mechanize库的简单使用示例
2014/01/10 Python
Python socket C/S结构的聊天室应用实现
2014/11/30 Python
简单介绍Python中的struct模块
2015/04/28 Python
分享Python字符串关键点
2015/12/13 Python
python高手之路python处理excel文件(方法汇总)
2016/01/07 Python
详解Python中的相对导入和绝对导入
2017/01/06 Python
Python编程使用NLTK进行自然语言处理详解
2017/11/16 Python
python tkinter实现屏保程序
2019/07/30 Python
numpy中的meshgrid函数的使用
2019/07/31 Python
Python实现快速排序的方法详解
2019/10/25 Python
Python文件操作函数用法实例详解
2019/12/24 Python
python连接mysql有哪些方法
2020/06/24 Python
python3让print输出不换行的方法
2020/08/24 Python
Restful_framework视图组件代码实例解析
2020/11/17 Python
党校培训自我鉴定
2014/02/01 职场文书
2014年医生工作总结
2014/11/21 职场文书
幽默导游词应该怎么写?
2019/08/26 职场文书
Elasticsearch 批量操作
2022/04/19 Python