2011-10-12 50 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++類型如何對齊的問題。所以,問題仍然在理論上開放...

回答