C ++,Python和数字的不兼容的类型

我现在用的vector_indexing_suite Boost中遇到了困难。 在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 ++多头与Python不兼容? 这也当我使用int代替长无处不不起作用。 帮助非常感谢!

!更新! 给定的输入以Python列表的时候,而不是一个numpy的阵列NumpyArrayToPyVecLong工作正常。 我一直试图使各类numpy的阵列(INT16,INT32,Int64的,UINT16等),但他们没有工作。 它只是给出一个简单的Python列表时有效。 任何想法,为什么这些类型都与C ++不兼容长?

!更新! 第二:一种用于此解决方案只是使用p_vec.append(vec[i])但是这并不真正回答如何numpy的阵列和C ++类型对齐的问题。 因此,问题仍然是理论上开...

--------------解决方案-------------

numpy的和C类型是列在这里的关系(勾选“兼容:C ...”部分):http://docs.scipy.org/doc/numpy/reference/arrays.scalars.html#built-in-标量类型

大小指定的类型( int16等)映射到C intlonglong long等。 在一个特定平台的方式。 numpy/ndarrayobject.h然而定义类型定义npy_int8等。

分类:C# 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 2.511 (s). 10 q(s)