我在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++类型如何对齐的问题。所以,问题仍然在理论上开放...