若是要作一個文檔糟糕排行榜的話,對mxnet
來講,會是一個好消息。由於他們有了墊背者——Boost,具體點是Boost.Python
(其它子塊還沒怎麼用很差評)。實際上,對比起來看,mxnet的文檔能夠稱爲傑做。。。從原理,到函數說明,到例子;再看看這位,簡直就是xxxx。描述沒有,例子沒有,還要問原理?光是用在偵查怎麼編譯出來運行的工做,投入的腦細胞工做時均可以在兆億億億億億億億億億億億級別。多的不說,看看官方文檔的sht-style吧\weixiao(前方高能預警)。html
可是有什麼辦法,誰叫人家牛呀,罵完了還得接着幹。numpy
接口幾乎就是我用python接口的惟一理由(否則就是在做死)。因此很關鍵,但這方面能找到的資料有些少(其餘人都是怎麼作的...)發現一個Boost.Python
的擴展版用以支持numpy
,但後面發現已經在去年被廢棄了,說是合到了官方主線上(\tuxie),因而又只好跪求這官方文檔。
最終仍是沒期望上,處處拼接了一些,程序纔算運行上(也是碎了一地),放這吧。python
// 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
測試腳本ios
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.]])
cpp
,hpp
編譯能夠成功,但import
的時候會提示沒有找到初始化函數。BOOST_PYTHON_MODULE
以前先用using namespace boost::python
(我也不清楚,以前覺得是宏展開出問題了,但加了括號後發現仍沒有起做用——暫留)