Bonjour,
Voici mon problème, j'ai une classe Matrix qui encapsule un tableau 1D et qui possède un constructeur comme :
et des fonctions qui utilisent cette classe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 template<typename T> class Matrix { ... public: Matrix(int nrow, int ncol, double* data); ... }
et j'aimerais créer un typemap pour pouvoir directement utiliser les tableaux numpy. En m'inspirant des typemaps de numpy je suis parvenu à :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 double quelque_chose(const Matrix& mat);
mais il y a deux problèmes (au moins):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 %typemap(in, fragment="NumPy_Fragments") const Matrix< double >& (PyArrayObject* array=NULL, int is_new_object=0,Matrix<double> *new_mat=0 ) { npy_intp size[2] = { -1, -1 }; array = obj_to_array_contiguous_allow_conversion($input, NPY_DOUBLE, &is_new_object); if (!array || !require_dimensions(array, 2) || !require_size(array, size, 2)) SWIG_fail; new_mat = new Matrix<double>((size_t) array_size(array,0),(size_t) array_size(array,1), (double*) array_data(array)); $1 = new_mat; }
- la matrice créée n'est pas détruite (fuite de mémoire)
- je suis obligé de créer un typemap par type de données
Toute solution, piste, conseil seront les bienvenus.
D'avance merci,
Alexis.M
Partager