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实现把json格式转换成文本或sql文件
Jul 10 Python
理解生产者消费者模型及在Python编程中的运用实例
Jun 26 Python
Python初学时购物车程序练习实例(推荐)
Aug 08 Python
Flask框架踩坑之ajax跨域请求实现
Feb 22 Python
Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析
Apr 27 Python
Flask框架模板渲染操作简单示例
Jul 31 Python
numpy中的meshgrid函数的使用
Jul 31 Python
如何基于Python实现数字类型转换
Feb 07 Python
基于python和flask实现http接口过程解析
Jun 15 Python
在pytorch中动态调整优化器的学习率方式
Jun 24 Python
Python LMDB库的使用示例
Feb 14 Python
只用50行Python代码爬取网络美女高清图片
Jun 02 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
PHP微信公众号自动发送红包API
2016/06/01 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
jquery 表格的增行删行实现思路
2013/03/21 Javascript
javascript 弹出的窗口返回值给父窗口具体实现
2013/11/23 Javascript
javascript如何创建表格(javascript绘制表格的二种方法)
2013/12/10 Javascript
Bootstrap每天必学之下拉菜单
2015/11/25 Javascript
js流动式效果显示当前系统时间
2016/05/16 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
2016/08/01 Javascript
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
原生JS实现前端本地文件上传
2018/09/08 Javascript
在node中使用jwt签发与验证token的方法
2019/04/03 Javascript
JavaScript 继承 封装 多态实现及原理详解
2019/07/29 Javascript
在Python的框架中为MySQL实现restful接口的教程
2015/04/08 Python
Python的Django REST框架中的序列化及请求和返回
2016/04/11 Python
Tensorflow 合并通道及加载子模型的方法
2018/07/26 Python
python动态视频下载器的实现方法
2019/09/16 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
python将时分秒转换成秒的实例
2019/12/07 Python
Python中的__init__作用是什么
2020/06/09 Python
html5本地存储_动力节点Java学院整理
2017/07/12 HTML / CSS
JBL澳大利亚官方商店:扬声器、耳机和音响系统
2018/05/24 全球购物
瑞典廉价机票预订网站:Seat24
2018/06/19 全球购物
苏格兰在线威士忌商店:The Whisky Barrel
2019/05/07 全球购物
惠普新加坡官方商店:HP Singapore
2020/04/17 全球购物
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
NULL是什么,它是怎么定义的
2015/05/09 面试题
Linux管理员面试题 Linux admin interview questions
2016/07/08 面试题
自考毕业自我鉴定范文
2013/10/27 职场文书
周年庆典邀请函范文
2014/01/23 职场文书
办理护照工作证明
2014/10/10 职场文书
2015年酒店工作总结范文
2015/04/07 职场文书
交心谈心活动总结
2015/05/11 职场文书
老人院义工活动感想
2015/08/07 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书
Centos环境下Postgresql 安装配置及环境变量配置技巧
2021/05/18 PostgreSQL
Linux安装Docker详细教程
2022/07/07 Servers