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正则表达式 re模块使用说明
May 19 Python
Python selenium如何设置等待时间
Sep 15 Python
Python实现简易端口扫描器代码实例
Mar 15 Python
Python字典,函数,全局变量代码解析
Dec 18 Python
解决python打不开文件(文件不存在)的问题
Feb 18 Python
Flask框架踩坑之ajax跨域请求实现
Feb 22 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
Jun 26 Python
python覆盖写入,追加写入的实例
Jun 26 Python
用Python从0开始实现一个中文拼音输入法的思路详解
Jul 20 Python
pytorch 实现tensor与numpy数组转换
Dec 27 Python
python 如何调用远程接口
Sep 11 Python
Python 中的函数装饰器和闭包详解
Feb 06 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防止form重复提交的方法
2013/07/01 PHP
PHP获取MAC地址的具体实例
2013/12/13 PHP
使用CodeIgniter的类库做图片上传
2014/06/12 PHP
深入分析PHP引用(&amp;)
2014/09/04 PHP
Yii基于数组和对象的Model查询技巧实例详解
2015/12/28 PHP
php版微信公众号接口实现发红包的方法
2016/10/14 PHP
父窗口获取弹出子窗口文本框的值
2006/06/27 Javascript
Javascript Tab 导航插件 (23个)
2009/06/11 Javascript
js parseInt(&quot;08&quot;)未指定进位制问题
2010/06/19 Javascript
ExtJs GridPanel简单的增删改实现代码
2010/08/26 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
JavaScript如何获取数组最大值和最小值
2015/11/18 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
Vue学习笔记进阶篇之过渡状态详解
2017/07/14 Javascript
vue+iview实现文件上传
2020/11/17 Vue.js
[00:20]TI9不朽观赛名额抽取
2019/08/05 DOTA
详解Python中的type()方法的使用
2015/05/21 Python
python实现批量改文件名称的方法
2015/05/25 Python
python生成器表达式和列表解析
2016/03/10 Python
Python安装第三方库及常见问题处理方法汇总
2016/09/13 Python
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
python 字典修改键(key)的几种方法
2018/08/10 Python
django的ORM操作 删除和编辑实现详解
2019/07/24 Python
详解Python Opencv和PIL读取图像文件的差别
2019/12/27 Python
tensorflow使用指定gpu的方法
2020/02/04 Python
TensorFlow打印输出tensor的值
2020/04/19 Python
python中元组的用法整理
2020/06/15 Python
JAVA中运算符的分类及举例
2015/09/12 面试题
培训自我鉴定
2014/01/31 职场文书
委托书怎样写
2014/08/30 职场文书
小学生田径运动会广播稿
2014/09/11 职场文书
2014年药剂科工作总结
2014/11/26 职场文书
教师工作表现自我评价
2015/03/05 职场文书
2016年学校党支部创先争优活动总结
2016/04/05 职场文书
致创业的您:这类人不适合餐饮创业
2019/08/19 职场文书
聊聊redis-dump工具安装问题
2022/01/18 Redis