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})
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值