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