溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

怎么在python3 中利用Eigen對(duì)代碼進(jìn)行加速

發(fā)布時(shí)間:2020-12-07 14:23:38 來(lái)源:億速云 閱讀:760 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

這篇文章給大家介紹怎么在python3 中利用Eigen對(duì)代碼進(jìn)行加速,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

第一步:準(zhǔn)備系統(tǒng)和IDE:

  • Windows 10 
  • vs2015 (用于調(diào)試c++代碼)
  • vscode (調(diào)試python代碼)

第二步:python虛擬環(huán)境:

1.創(chuàng)建虛擬python虛擬環(huán)境: 在vscode的terminal中執(zhí)行  

python -m venv env

2.下載  Eigen : 將Eigen解壓到當(dāng)前目錄命名為 eigen-3.3.8

3.在vscode的terminal中激活虛擬環(huán)境:

./env/Scripts/Activate.ps1

4.安裝pybind11: 

pip install pybind11

安裝numpy==1.19.3(使用1.19.4可能會(huì)有問(wèn)題) :

 pip install numpy==1.19.3 

第三步:使用vs2015編寫(xiě)cpp_python.cpp, 并保證沒(méi)有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" 函數(shù)。程序執(zhí)行將在此處開(kāi)始并結(jié)束。
//
#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";//解釋說(shuō)明
	m.def("mat_add_py"/*在pyhon中使用的函數(shù)名*/, &add_mat);
}

第五步:設(shè)置setup.py用來(lái)編譯c++代碼

from setuptools import setup
from setuptools import Extension

add_mat_module = Extension(name='add_mat_moudle', # 模塊名稱(chēng)
              sources=['cpp_python.cpp'],  # 源碼
              include_dirs=[r'.\eigen-3.3.8',
                    r'.\env\Scripts',   # 依賴(lài)的第三方庫(kù)的頭文件
                     r'.\env\Lib\site-packages\pybind11\include']
              )

setup(ext_modules=[add_mat_module])

第六步:編譯測(cè)試

這是我當(dāng)前的工作目錄

怎么在python3 中利用Eigen對(duì)代碼進(jìn)行加速

注意:我的cpp_python.cpp和setup.py是在同一個(gè)文件夾下。

執(zhí)行: "python .\setup.py build_ext --inplace"就會(huì)得下面的結(jié)果,生成.pyd文件表明我們已經(jīng)編譯成功。

怎么在python3 中利用Eigen對(duì)代碼進(jìn)行加速

運(yùn)行測(cè)試:

怎么在python3 中利用Eigen對(duì)代碼進(jìn)行加速

關(guān)于怎么在python3 中利用Eigen對(duì)代碼進(jìn)行加速就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI