温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么在python3 中利用Eigen对代码进行加速

发布时间:2020-12-07 14:23:38 来源:亿速云 阅读:740 作者:Leah 栏目:开发技术

这篇文章给大家介绍怎么在python3 中利用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

4.安装pybind11: 

pip install pybind11

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

第六步:编译测试

这是我当前的工作目录

怎么在python3 中利用Eigen对代码进行加速

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

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

怎么在python3 中利用Eigen对代码进行加速

运行测试:

怎么在python3 中利用Eigen对代码进行加速

关于怎么在python3 中利用Eigen对代码进行加速就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI