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中Genarator函数用法分析
Apr 08 Python
Python3读取UTF-8文件及统计文件行数的方法
May 22 Python
Python 结巴分词实现关键词抽取分析
Oct 21 Python
Python数据结构与算法之字典树实现方法示例
Dec 13 Python
python的dataframe和matrix的互换方法
Apr 11 Python
Python处理菜单消息操作示例【基于win32ui模块】
May 09 Python
python用plt画图时,cmp设置方法
Dec 13 Python
python实现控制COM口的示例
Jul 03 Python
python监控nginx端口和进程状态
Sep 06 Python
Python抓包程序mitmproxy安装和使用过程图解
Mar 02 Python
python3 logging日志封装实例
Apr 08 Python
pygame面向对象的飞行小鸟实现(Flappy bird)
Apr 01 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(8) php 数组
2010/03/05 PHP
PHP命名空间与自动加载类详解
2018/09/04 PHP
解决tp5在nginx下修改配置访问的问题
2019/10/16 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
jQuery 使用手册(三)
2009/09/23 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
屏蔽script注入小例子
2013/11/12 Javascript
jQuery中die()方法用法实例
2015/01/19 Javascript
js仿黑客帝国字母掉落效果代码分享
2020/11/08 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
jQuery学习心得总结(必看篇)
2016/06/10 Javascript
总结JavaScript的正则与其他语言的不同之处
2016/08/25 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
2016/10/13 Javascript
微信小程序 小程序制作及动画(animation样式)详解
2017/01/06 Javascript
vue实现微信分享功能
2018/11/28 Javascript
layui button 按钮弹出提示窗口,确定才进行的方法
2019/09/06 Javascript
小程序使用watch监听数据变化的方法详解
2019/09/20 Javascript
nuxt+axios实现打包后动态修改请求地址的方法
2020/04/22 Javascript
vue实现商品列表的添加删除实例讲解
2020/05/14 Javascript
vue+canvas实现拼图小游戏
2020/09/18 Javascript
微信小程序获取当前时间及星期几的实例代码
2020/09/20 Javascript
[02:03]DOTA2亚洲邀请赛 HGT战队出场宣传片
2015/02/07 DOTA
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
python实现nao机器人身体躯干和腿部动作操作
2019/04/29 Python
浅谈Python中文件夹和python package包的区别
2020/06/01 Python
Python+Opencv身份证号码区域提取及识别实现
2020/08/25 Python
好莱坞百老汇御用王牌美妆:Koh Gen Do 江原道
2018/04/03 全球购物
全球立体声:World Wide Stereo
2018/09/29 全球购物
main 函数执行以前,还会执行什么代码
2013/04/17 面试题
热爱祖国演讲稿
2014/05/04 职场文书
企业开业庆典答谢词
2015/01/20 职场文书
机关工会工作总结2015
2015/05/26 职场文书
小学毕业感言200字
2015/07/30 职场文书
2016年“9.22”世界无车日活动小结
2016/04/05 职场文书
利用Python判断整数是否是回文数的3种方法总结
2021/07/07 Python
JavaScript展开运算符和剩余运算符的区别详解
2022/02/18 Javascript