Я пытаюсь передать данные по слоям numpy и boost :: ublas. я
написал ультратонкую оболочку, потому что Swig не может разобрать ублас
заголовок правильно. Код показан ниже
#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.]))
это дает мне ошибку. Это первый раз, когда я использую Swigh с NumPy
и не имеют полного понимания между преобразованием данных и
передача в буфер памяти. Кто-нибудь видит что-то очевидное у меня
пропущенный? Я пытался отследить с помощью отладчика, но он разбился в ассемблеры python.exe. Я понятия не имею, если это проблема глотка или моей простой обертки. Все ценится.