gpt4 book ai didi

C++、Python、不兼容的数字类型

转载 作者:太空宇宙 更新时间:2023-11-04 12:15:50 25 4
gpt4 key购买 nike

我在使用 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)

因此,程序计算 vector 示例,但在尝试计算 vector 日期时返回以下错误:

TypeError: Attempting to append an invalid type

为什么会有想法? C++ 中的 Longs 与 Python 不兼容吗?当我用 int 替换 long 时,这也不起作用。帮助非常感谢!

!更新!当将输入作为 python 列表而不是 numpy 数组时,NumpyArrayToPyVecLong 工作正常。我试过制作各种类型的 numpy 数组(int16、int32、int64、uint16 等),但它们都不起作用。它只有在给定一个普通的 python 列表时才有效。知道为什么这些类型都与 C++ long 不兼容吗?

!更新!第二:一个解决方案是使用 p_vec.append(vec[i]) 但这实际上并没有回答 numpy 数组和 C++ 类型如何对齐的问题。所以理论上这些问题仍然悬而未决......

最佳答案

此处列出了 Numpy 和 C 类型之间的关系(检查“兼容:C ...”部分): http://docs.scipy.org/doc/numpy/reference/arrays.scalars.html#built-in-scalar-types

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

关于C++、Python、不兼容的数字类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7737479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com