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通过scapy获取局域网所有主机mac地址示例
May 04 Python
跟老齐学Python之使用Python操作数据库(1)
Nov 25 Python
Python实现的数据结构与算法之基本搜索详解
Apr 22 Python
Python利用正则表达式匹配并截取指定子串及去重的方法
Jul 30 Python
基于Python中capitalize()与title()的区别详解
Dec 09 Python
dataframe 按条件替换某一列中的值方法
Jan 29 Python
linux安装python修改默认python版本方法
Mar 31 Python
Python with语句和过程抽取思想
Dec 23 Python
python:删除离群值操作(每一行为一类数据)
Jun 08 Python
Python学习之路安装pycharm的教程详解
Jun 17 Python
Python中Selenium模块的使用详解
Oct 09 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
Mar 04 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 addslashes()与addclashes()函数的区别和比较
2013/06/24 PHP
PHP编程中尝试程序并发的几种方式总结
2016/03/21 PHP
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
jQuery 关于伪类选择符的使用说明
2013/04/24 Javascript
jQuery插件实现大图全屏图片相册
2015/03/14 Javascript
JavaScript中switch语句的用法详解
2015/06/03 Javascript
JavaScript实现的类字典插入或更新方法实例
2015/07/10 Javascript
Jquery Ajax Error 调试错误的技巧
2015/11/20 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
jQuery简单实现遍历单选框的方法
2017/03/06 Javascript
Nodejs实现多房间简易聊天室功能
2017/06/20 NodeJs
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
vue安装和使用scss及sass与scss的区别详解
2018/10/15 Javascript
javascript获取select值的方法完整实例
2019/06/20 Javascript
使用react context 实现vue插槽slot功能
2019/07/18 Javascript
JS模拟浏览器实现全局搜索功能
2019/09/11 Javascript
Element Badge标记的使用方法
2020/07/27 Javascript
H5 js点击按钮复制文本到粘贴板
2020/11/19 Javascript
Python的lambda匿名函数的简单介绍
2013/04/25 Python
Mac中Python 3环境下安装scrapy的方法教程
2017/10/26 Python
详解将Django部署到Centos7全攻略
2018/09/26 Python
Python模块汇总(常用第三方库)
2019/10/07 Python
Python基于百度AI实现OCR文字识别
2020/04/02 Python
VScode连接远程服务器上的jupyter notebook的实现
2020/04/23 Python
python能做哪些生活有趣的事情
2020/09/09 Python
Python通过Schema实现数据验证方式
2020/11/12 Python
美国全球旅游运营商:Pacific Holidays
2018/06/18 全球购物
护士自荐信
2013/10/25 职场文书
实习生工作证明范本
2014/09/14 职场文书
学校联谊协议书
2014/09/16 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书
安装工程师岗位职责
2015/02/13 职场文书
焦裕禄观后感
2015/06/03 职场文书
水浒传读书笔记
2015/06/25 职场文书
教师节表彰会主持词
2015/07/06 职场文书
《英雄联盟》2022日蚀、月蚀皮肤演示 黑潮亚索曝光
2022/04/13 其他游戏