python調用c++接口(pybind11)

pybind11是一個將c++接口轉接給python的庫,它支持C++ 11標準的編譯器。
這裏我做了一個簡單的實驗,主要是驗證將Eigen::MatrixXf類型映射到numpy::ndarray類型,這樣就可以在python愉快地調用C++函數了。
完整代碼見:https://download.csdn.net/download/weixin_38258767/12301615
首先,python腳本代碼:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import os
path_current = os.path.dirname(os.path.abspath(__file__))
path_build = os.path.join(path_current, "../build")
sys.path.append(path_build)  

import numpy as np
from PYBIND_TEST import add_matrix

if __name__ == "__main__":
    a = np.array([[1,1],[2,2]])
    b = np.array([[2,2],[1,1]])
    print(add_matrix(a,b))

  • 這裏的PYBIND_TEST是通過pybind11轉接的工程名,add_matrix是一個矩陣加法。
    C++函數定義:
#include "test.h"
using MatType = Eigen::Matrix2f;

MatType add_matrix(MatType a,MatType b){
    return a+b;
}

C++轉接腳本bind.cpp

#include <pybind11/pybind11.h>
#include <pybind11/stl.h>

#include "test.h"


PYBIND11_MODULE(PYBIND_TEST,m)
{
    m.def("add_matrix", add_matrix,
             pybind11::arg("a"),
             pybind11::arg("b"));
}


CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)
project(pybind11_test)

set(CMAKE_CXX_FLAGS "-std=c++11 -Wall -O2 ${OpenMP_CXX_FLAGS}")
set(PYBIND11_CPP_STANDARD -std=c++11)
find_package(PythonInterp REQUIRED)


include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include/)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/pybind11/)
set(SOURCEFILES src/test.cpp )

pybind11_add_module(PYBIND_TEST MODULE bind.cpp ${SOURCEFILES})
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章