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中的yield浅析
Jun 16 Python
Python解析json文件相关知识学习
Mar 01 Python
Python的Asyncore异步Socket模块及实现端口转发的例子
Jun 14 Python
Django 2.0版本的新特性抢先看!
Jan 05 Python
python版本五子棋的实现代码
Dec 11 Python
python进行TCP端口扫描的实现
Dec 21 Python
Python脚本操作Excel实现批量替换功能
Nov 20 Python
opencv 实现特定颜色线条提取与定位操作
Jun 02 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
Aug 07 Python
基于pycharm 项目和项目文件命名规则的介绍
Jan 15 Python
python中urllib包的网络请求教程
Apr 19 Python
解决Python保存文件名太长OSError: [Errno 36] File name too long
May 11 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 友好URL的实现(吐血推荐)
2008/10/04 PHP
PHP连接Access数据库的方法小结
2013/06/20 PHP
UTF-8正则表达式如何匹配汉字
2015/08/03 PHP
php脚本运行时的超时机制详解
2016/02/17 PHP
页面中body onload 和 window.onload 冲突的问题的解决
2009/07/01 Javascript
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
2015/06/23 Javascript
js简单实现表单中点击按钮动态增加输入框数量的方法
2015/08/18 Javascript
jQuery实现每隔几条元素增加1条线的方法
2016/06/27 Javascript
老生常谈javascript的类型转换
2016/10/12 Javascript
基于JQuery的购物车添加删除以及结算功能示例
2017/03/08 Javascript
axios基本入门用法教程
2017/03/25 Javascript
jQuery ajax动态生成table功能示例
2017/06/14 jQuery
详解微信小程序图片地扯转base64解决方案
2019/08/18 Javascript
小程序如何自主实现拦截器的示例代码
2019/11/04 Javascript
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
Python读取Excel的方法实例分析
2015/07/11 Python
使用pip发布Python程序的方法步骤
2018/10/11 Python
python3.4爬虫demo
2019/01/22 Python
对Python w和w+权限的区别详解
2019/01/23 Python
python中update的基本使用方法详解
2019/07/17 Python
记一次pyinstaller打包pygame项目为exe的过程(带图片)
2020/03/02 Python
Python tornado上传文件的功能
2020/03/26 Python
通过实例简单了解python yield使用方法
2020/08/06 Python
python海龟绘图之画国旗实例代码
2020/11/11 Python
利用python制作拼图小游戏的全过程
2020/12/04 Python
Nike西班牙官方网站:Nike.com (ES)
2017/10/30 全球购物
彪马香港官方网上商店:PUMA香港
2020/12/06 全球购物
玩具公司的创业计划书
2013/12/31 职场文书
财务部经理岗位职责
2014/02/03 职场文书
廉洁自律承诺书
2014/03/27 职场文书
2014年社区国庆节活动方案
2014/09/16 职场文书
2014法院四风问题对照检查材料思想汇报
2014/10/04 职场文书
岳麓书院导游词
2015/02/03 职场文书
放假通知
2015/04/14 职场文书
CSS实现两列布局的N种方法
2021/08/02 HTML / CSS