2011-10-12 4 views
1

J'ai du mal à utiliser vector_indexing_suite dans Boost. En C++ j'ai défini:C++, Python, types de nombres incompatibles

class_<std::vector<double> >("PyVecDouble") 
         .def(vector_indexing_suite<std::vector<double> >()); 

et

class_<std::vector<long> >("PyVecLong") 
         .def(vector_indexing_suite<std::vector<long> >()); 

Et en python, j'ai essayé de les utiliser dans le programme simple:

def NumpyArrayToPyVecDouble(vec): 
    n = len(vec) 
    p_vec = jp.PyVecDouble() 

    for i in xrange(0,n): 
     p_vec.append(vec[i]) 

    return p_vec 

def NumpyArrayToPyVecLong(vec): 
    n = len(vec) 
    p_vec = jp.PyVecLong() 

    for i in xrange(0,n): 
     p_vec.append(vec[i]) 

    return p_vec 

example_array = np.array([1.1, 2.2, 3.3, 4.4]) 
example = NumpyArrayToPyVecDouble(double_array) 

dates_array = np.array([01122011, 01062012, 01122012, 01062013]) 
dates = NumpyArrayToPyVecLong(dates_array) 

En conséquence, la programme calcule l'exemple de vecteur, mais renvoie l'erreur suivante lorsqu'il tente de calculer les dates de vecteur:

TypeError: Attempting to append an invalid type 

Et des idées pourquoi? Les longs en C++ sont-ils incompatibles avec Python? Cela ne fonctionne pas non plus quand je remplace longtemps partout avec int. Aide beaucoup apprécié!

! MISE À JOUR! NumpyArrayToPyVecLong fonctionne correctement lorsqu'il reçoit l'entrée en tant que liste python par opposition à un tableau numpy. J'ai essayé de faire différents types de tableaux chiffrés (int16, int32, int64, uint16, etc) mais aucun d'entre eux ne fonctionne. Cela fonctionne seulement quand donné une liste simple de python. Des idées pour lesquelles ces types sont tous incompatibles avec le C++?

! MISE À JOUR! la seconde: Une solution pour cela est juste d'utiliser p_vec.append(vec[i]) mais cela ne répond pas réellement au problème de l'alignement des tableaux et des types C++. Ainsi, les questions sont encore ouvertes en théorie ...

Répondre