python 通过 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

python 通过 pybind11 使用Eigen加速代码的步骤

4.安装pybind11:

pip install pybind11

5.安装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])

第六步:编译测试

python 通过 pybind11 使用Eigen加速代码的步骤

注意:我的cpp_python.cpp和setup.py是在同一个文件夹下。

执行: "python .\setup.py build_ext --inplace"就会得下面的结果,生成.pyd文件表明我们已经编译成功。

python 通过 pybind11 使用Eigen加速代码的步骤

运行测试:

python 通过 pybind11 使用Eigen加速代码的步骤

以上就是python 通过 pybind11 使用Eigen加速代码的步骤的详细内容,更多关于python 加速代码的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python人人网登录应用实例
Sep 26 Python
用python实现面向对像的ASP程序实例
Nov 10 Python
python对json的相关操作实例详解
Jan 04 Python
python 解压pkl文件的方法
Oct 25 Python
浅谈Python小波分析库Pywavelets的一点使用心得
Jul 09 Python
Django之使用celery和NGINX生成静态页面实现性能优化
Oct 08 Python
Python绘制二维曲线的日常应用详解
Dec 04 Python
Pytorch .pth权重文件的使用解析
Feb 14 Python
python 动态渲染 mysql 配置文件的示例
Nov 20 Python
Python 处理表格进行成绩排序的操作代码
Jul 26 Python
Python查找算法的实现 (线性、二分,分块、插值查找算法)
Apr 24 Python
LeetCode189轮转数组python示例
Aug 05 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
python集合的新增元素方法整理
Dec 07 #Python
You might like
基于Zend的Config机制的应用分析
2013/05/02 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
2014/08/23 PHP
php中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
php在线解压ZIP文件的方法
2014/12/30 PHP
php工具型代码之印章抠图
2018/07/18 PHP
PHP getDocNamespaces()函数讲解
2019/02/03 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
javascript 写类方式之六
2009/07/05 Javascript
jQuery初学:find()方法及children方法的区别分析
2011/01/31 Javascript
jquery插件开发之实现google+圈子选择功能
2014/03/10 Javascript
jquery实现的下拉和收缩效果示例
2014/08/21 Javascript
nodejs如何获取时间戳与时间差
2016/08/03 NodeJs
layui前段框架日期控件使用方法详解
2017/05/19 Javascript
微信小程序组件 marquee实例详解
2017/06/23 Javascript
基于jQuery实现Ajax验证用户名是否可用实例
2018/03/25 jQuery
Vue filter介绍及详细使用
2018/04/04 Javascript
python 实现插入排序算法
2012/06/05 Python
PyQt5 QSerialPort子线程操作的实现
2018/04/21 Python
使用python的pexpect模块,实现远程免密登录的示例
2019/02/14 Python
利用python Selenium实现自动登陆京东签到领金币功能
2019/10/31 Python
基于Python爬取京东双十一商品价格曲线
2020/10/23 Python
Html5与App的通讯方式详解
2019/10/24 HTML / CSS
金讯Java笔试题目
2013/06/18 面试题
Unix控制后台进程都有哪些进程
2016/09/22 面试题
英文翻译的自我评价语句
2013/10/04 职场文书
公司行政经理岗位职责
2013/12/24 职场文书
毕业生护理专业个人求职信范文
2014/01/04 职场文书
工伤赔偿协议书范本
2014/04/15 职场文书
考研复习计划
2015/01/19 职场文书
学习保证书100字
2015/02/26 职场文书
2015年敬老月活动总结
2015/03/27 职场文书
2015年街道办事处团委工作总结
2015/10/14 职场文书
2016形势与政策学习心得体会
2016/01/12 职场文书
CSS3实现模糊背景的三种效果示例
2021/03/30 HTML / CSS
Golang的继承模拟实例
2021/06/30 Golang
Java+swing实现抖音上的表白程序详解
2022/06/25 Java/Android