我想在numpy和boost :: ublas圖層之間傳遞數據。 I 已經寫了一個超薄包裝,因爲swig無法正確解析ublas' 頭。代碼如下所示用swig包裝boost :: ublas
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/lexical_cast.hpp>
#include <algorithm>
#include <sstream>
#include <string>
using std::copy;
using namespace boost;
typedef boost::numeric::ublas::matrix<double> dm;
typedef boost::numeric::ublas::vector<double> dv;
class dvector : public dv{
public:
dvector(const int rhs):dv(rhs){;};
dvector();
dvector(const int size, double* ptr):dv(size){
copy(ptr, ptr+sizeof(double)*size, &(dv::data()[0]));
}
~dvector(){}
};
與SWIG接口,看起來像
%apply(int DIM1, double* INPLACE_ARRAY1) {(const int size, double* ptr)}
class dvector{
public:
dvector(const int rhs);
dvector();
dvector(const int size, double* ptr);
%newobject toString;
char* toString();
~dvector();
};
我已經通過GCC 4.3和VC++ 9.0編譯成功他們。不過 當我只是運行
a = dvector(array([1.,2.,3.]))
它給了我一個段錯誤。這是我第一次使用swig和numpy ,並且沒有完全理解數據轉換和 之間的內存緩衝區通過。有沒有人看到我有 錯過了?我試圖用調試器追蹤,但它在python.exe的assmeblys內崩潰。我不知道如果這是一個流氓問題或我簡單的包裝。任何感謝。