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利用elaphe制作二维条形码实现代码
May 25 Python
Python实现读取json文件到excel表
Nov 18 Python
python获取代理IP的实例分享
May 07 Python
python通过Windows下远程控制Linux系统
Jun 20 Python
TensorFlow设置日志级别的几种方式小结
Feb 04 Python
使用celery和Django处理异步任务的流程分析
Feb 19 Python
windows、linux下打包Python3程序详细方法
Mar 17 Python
python使用Thread的setDaemon启动后台线程教程
Apr 25 Python
python cv2.resize函数high和width注意事项说明
Jul 05 Python
pymysql模块使用简介与示例
Nov 17 Python
python爬虫快速响应服务器的做法
Nov 24 Python
pytorch常用数据类型所占字节数对照表一览
May 17 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高手?学会“懒惰”的编程
2006/12/05 PHP
php反弹shell实现代码
2009/04/22 PHP
php简单备份与还原MySql的方法
2016/05/09 PHP
php 魔术常量详解及实例代码
2016/12/04 PHP
prototype与jquery下Ajax实现的差别
2009/09/13 Javascript
关于jQuery新的事件绑定机制on()的使用技巧
2013/04/26 Javascript
使用jQuery时Form表单元素ID和name命名大忌
2014/03/06 Javascript
浅谈JavaScript字符集
2014/05/22 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
2017/02/17 Javascript
Kotlin学习第一步 kotlin语法特性
2017/05/25 Javascript
详解基于webpack搭建react运行环境
2017/06/01 Javascript
JavaScript 程序错误Cannot use 'in' operator to search的解决方法
2017/07/10 Javascript
详细介绍RxJS在Angular中的应用
2017/09/23 Javascript
vue改变对象或数组时的刷新机制的方法总结
2019/04/24 Javascript
JavaScript命名空间模式实例详解
2019/06/20 Javascript
nodejs文件夹深层复制功能
2019/09/03 NodeJs
vant IndexBar实现的城市列表的示例代码
2019/11/20 Javascript
Vue切换div显示隐藏,多选,单选代码解析
2020/07/14 Javascript
Vue中添加滚动事件设置的方法详解
2020/09/14 Javascript
使用PDB简单调试Python程序简明指南
2015/04/25 Python
python中__call__内置函数用法实例
2015/06/04 Python
Go语言基于Socket编写服务器端与客户端通信的实例
2016/02/19 Python
python中for循环输出列表索引与对应的值方法
2018/11/07 Python
django+tornado实现实时查看远程日志的方法
2019/08/12 Python
python中np是做什么的
2020/07/21 Python
python用700行代码实现http客户端
2021/01/14 Python
完美实现CSS垂直居中的11种方法
2021/03/27 HTML / CSS
民生工程实施方案
2014/03/22 职场文书
交通事故调解协议书
2014/04/16 职场文书
工程负责人任命书
2014/06/06 职场文书
七一党日活动总结
2014/07/08 职场文书
缓刑期间思想汇报范文
2014/10/10 职场文书
教师师德工作总结2015
2015/07/22 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书
pycharm部署django项目到云服务器的详细流程
2021/06/29 Python