2011-10-12 49 views
1

我在Boost中使用vector_indexing_suite时遇到困难。 在C++中我已经定义:C++,Python,不兼容的数字类型

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

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

而且在Python,我试图在以下简单的程序使用这些:

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) 

其结果是,该程序计算矢量示例,但在尝试计算矢量日期时返回以下错误:

TypeError: Attempting to append an invalid type 

和想法为什么? C++中的long是否与Python不兼容?当我用int替换long时,这也不起作用。非常感谢!

!更新! NumpyArrayToPyVecLong在输入作为python列表而不是numpy数组时可以正常工作。我试过制作各种类型的numpy数组(int16,int32,int64,uint16等),但它们都不起作用。它只在给出一个简单的python列表时才起作用。任何想法为什么这些类型都与C++ long不兼容?

!更新!第二个: 这个解决方案只是使用p_vec.append(vec[i]),但这实际上并不能解决numpy数组和C++类型如何对齐的问题。所以,问题仍然在理论上开放...

回答