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 相关文章推荐
Linux环境下MySQL-python安装过程分享
Feb 02 Python
Python多线程编程(六):可重入锁RLock
Apr 05 Python
Python浅拷贝与深拷贝用法实例
May 09 Python
python中list列表的高级函数
May 17 Python
基于Python对象引用、可变性和垃圾回收详解
Aug 21 Python
TensorFlow安装及jupyter notebook配置方法
Sep 08 Python
解决python3 Pycharm上连接数据库时报错的问题
Dec 03 Python
python清空命令行方式
Jan 13 Python
python可视化text()函数使用详解
Feb 11 Python
Python基于Twilio及腾讯云实现国际国内短信接口
Jun 18 Python
pymongo insert_many 批量插入的实例
Dec 05 Python
python中字符串String及其常见操作指南(方法、函数)
Apr 06 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
《OVERLORD》手游英文版即将上线 手机上也能扮演骨王
2020/04/09 日漫
php读取csv实现csv文件下载功能
2013/12/18 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
2015/12/17 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
PHP 极验验证码实例讲解
2016/09/29 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
2020/04/23 PHP
通过JavaScript控制字体大小的代码
2011/10/04 Javascript
javascript创建动态表单的方法
2015/07/25 Javascript
javascript 中的 delete及delete运算符
2015/11/15 Javascript
图解Sublime Text3使用技巧
2015/12/21 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
js实现无缝滚动图
2017/02/22 Javascript
基于jquery实现二级联动效果
2017/03/30 jQuery
详解Angular 自定义结构指令
2017/06/21 Javascript
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
vue input标签通用指令校验的实现
2019/11/05 Javascript
Vue的props父传子的示例代码
2020/05/20 Javascript
vue3.0 项目搭建和使用流程
2021/03/04 Vue.js
ubuntu16.04制作vim和python3的开发环境
2018/09/23 Python
Python经纬度坐标转换为距离及角度的实现
2020/11/01 Python
python 实现学生信息管理系统的示例
2020/11/28 Python
css3实现背景模糊的三种方式(小结)
2020/05/15 HTML / CSS
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
送货司机岗位职责
2013/12/11 职场文书
校园之星获奖感言
2014/01/29 职场文书
中专自我鉴定
2014/02/05 职场文书
出纳会计岗位职责
2014/03/12 职场文书
中学生学雷锋演讲稿
2014/04/26 职场文书
教师自我剖析材料范文
2014/09/30 职场文书
运动会表扬稿
2015/01/16 职场文书
合理化建议书
2015/02/04 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书
2016年六一儿童节开幕词
2016/03/04 职场文书
golang 在windows中设置环境变量的操作
2021/04/29 Golang