J'essaie de transmettre des données autour des couches numpy et boost :: ublas. J'ai écrit un wrapper ultra mince parce que swig ne peut pas analyser correctement l'en-tête d'ublas. Le code est illustré ci-dessouswrapping boost :: ublas avec 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(){}
};
avec l'interface SWIG qui ressemble à
%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();
};
je les ai compilé avec succès via gcc 4.3 et vC++ 9.0. Cependant quand je lance simplement
a = dvector(array([1.,2.,3.]))
il me donne une erreur de segmentation. C'est la première fois que j'utilise swigh avec numpy et ne pas avoir entièrement compris entre la conversion de données et passage de la mémoire tampon. Est-ce que quelqu'un voit quelque chose d'évident que j'ai manqué? J'ai essayé de tracer avec un débogueur mais il s'est écrasé dans les assmeblys de python.exe. Je n'ai aucune idée si c'est un problème de swig ou de mon emballage simple. Tout est apprécié.