Boost numpy 接口

如果要做一个文档糟糕排行榜的话,对mxnet来说,会是一个好消息。因为他们有了垫背者——Boost,具体点是Boost.Python(其它子块还没怎么用不好评)。实际上,对比起来看,mxnet的文档可以称为杰作。。。从原理,到函数说明,到例子;再看看这位,简直就是xxxx。描述没有,例子没有,还要问原理?光是用在侦查怎么编译出来运行的工作,投入的脑细胞工作时都可以在兆亿亿亿亿亿亿亿亿亿亿亿级别。多的不说,看看官方文档的sht-style吧\weixiao(前方高能预警)。

但是有什么办法,谁叫人家牛呀,骂完了还得接着干。numpy接口几乎就是我用python接口的唯一理由(不然就是在作死)。所以很关键,但这方面能找到的资料有些少(其他人都是怎么做的...)发现一个Boost.Python扩展版用以支持numpy,但后面发现已经在去年被废弃了,说是合到了官方主线上(\tuxie),于是又只好跪求这官方文档。
最终还是没指望上,到处拼接了一些,程序才算运行上(也是碎了一地),放这吧。

// test.cpp
#include<boost/python.hpp>
#include<boost/python/numeric.hpp>
#include<boost/python/tuple.hpp>
#include<iostream>
using namespace boost::python;
void test_array(numeric::array &y, float value)
{
  const tuple &shape= extract<tuple>(y.attr("shape"));
  int h = extract<int>(shape[0]);    // 这个接口看起来很实用 :)
  int w = extract<int>(shape[1]);
  for(int h_i=0;h_i<h;++h_i)
    for(int w_i=0;w_i<w;++w_i)
      y[make_tuple(h_i,w_i)]=h_i-w_i;
  y[make_tuple(0,0)] = value;
}
BOOST_PYTHON_MODULE(array_test)
{
  numeric::array::set_module_and_type("numpy", "ndarray");
  def("test",&test_array);
}
g++ test.cpp -o array_test.so -fPIC -shared -lboost_python -I /usr/include/python2.7

然后是python测试脚本

import numpy as np
import array_test

a=np.zeros((3,4))
array_test.test(a,-10.)
#>>> a
#array([[-10.,  -1.,  -2.,  -3.],
#       [  1.,   0.,  -1.,  -2.],
#       [  2.,   1.,   0.,  -1.]])

Sep 7, 2017

  1. 今天发现应该保存为cpphpp编译可以成功,但import的时候会提示没有找到初始化函数。
  2. 另外,BOOST_PYTHON_MODULE之前先用using namespace boost::python(我也不清楚,之前以为是宏展开出问题了,但加了括号后发现仍没有起作用——暂留)

转载于:https://www.cnblogs.com/chenyliang/p/7474335.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值