【发布时间】:2011-12-05 22:52:31
【问题描述】:
我在使用 Boost 中的 vector_indexing_suite 时遇到了困难。 在 C++ 中我已经定义:
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 时,这也不起作用。非常感谢您的帮助!
!更新! 当将输入作为 python 列表而不是 numpy 数组给出时,NumpyArrayToPyVecLong 工作正常。我尝试过制作各种类型的 numpy 数组(int16、int32、int64、uint16 等),但它们都不起作用。它仅在给定一个普通的 python 列表时才有效。任何想法为什么这些类型都与 C++ long 不兼容?
!更新!第二:
一个解决方案就是使用p_vec.append(vec[i]),但这实际上并不能解决numpy数组和C++类型如何对齐的问题。所以问题在理论上仍然是开放的......
【问题讨论】:
标签: c++ python types vector typeerror