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实现ip查询示例
Mar 26 Python
Python深入学习之闭包
Aug 31 Python
Python3实现Web网页图片下载
Jan 28 Python
通过源码分析Python中的切片赋值
May 08 Python
插入排序_Python与PHP的实现版(推荐)
May 11 Python
Python实现按照指定要求逆序输出一个数字的方法
Apr 19 Python
Python字典推导式将cookie字符串转化为字典解析
Aug 10 Python
Python 安装 virturalenv 虚拟环境的教程详解
Feb 21 Python
使用wxpy实现自动发送微信消息功能
Feb 28 Python
Django choices下拉列表绑定实例
Mar 13 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
Dec 08 Python
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
Apr 12 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
实现了一个PHP5的getter/setter基类的代码
2007/02/25 PHP
处理php自动反斜杠的函数代码
2010/01/05 PHP
PHP输出英文时间日期的安全方法(RFC 1123格式)
2014/06/13 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
js解析与序列化json数据(三)json的解析探讨
2013/02/01 Javascript
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
2013/05/08 Javascript
javascript Array.prototype.slice的使用示例
2013/11/14 Javascript
利用jQuery实现可以编辑的表格
2014/05/26 Javascript
在Node.js中实现文件复制的方法和实例
2014/06/05 Javascript
JS循环遍历JSON数据的方法
2014/07/08 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
2015/01/22 Javascript
JS实现新浪微博效果带遮罩层的弹出框代码
2015/10/12 Javascript
整理Javascript数组学习笔记
2015/11/29 Javascript
JS实现的手机端精简幻灯片效果
2016/09/05 Javascript
微信小程序加载更多 点击查看更多
2016/11/29 Javascript
几种tab切换详解
2017/02/03 Javascript
Ajax验证用户名或昵称是否已被注册
2017/04/05 Javascript
ionic 3.0+ 项目搭建运行环境的教程
2017/08/09 Javascript
js动态引入的四种方法
2018/05/05 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
使用JavaScript获取Django模板指定键值数据
2020/05/27 Javascript
python中的字典使用分享
2016/07/31 Python
windows系统下Python环境的搭建(Aptana Studio)
2017/03/06 Python
利用Python模拟登录pastebin.com的实现方法
2019/07/12 Python
对python中的装包与解包实例详解
2019/08/24 Python
Python基于DB-API操作MySQL数据库过程解析
2020/04/23 Python
Move Free官方海外旗舰店:美国骨关节健康专业品牌
2017/12/06 全球购物
意大利网上书店:LaFeltrinelli
2020/06/12 全球购物
小学生自我评价范例
2013/09/24 职场文书
留学自荐信
2013/10/10 职场文书
《小壁虎借尾巴》教学反思
2014/02/16 职场文书
开业庆典策划方案
2014/02/18 职场文书
计算机毕业生自荐信范文
2014/03/23 职场文书
销售口号霸气押韵
2015/12/24 职场文书
古见同学有交流障碍症 第二季宣传CM公开播出
2022/04/11 日漫