1

对于给定的 ctype 数组或 python 列表,如何将 python 对象转换为 cython void ptr?

我现在这样做的方式是这样的(_arr 是 python 列表):

int *int_t = <int*> malloc(cython.sizeof(int) * len(_arr))
if int_t is NULL:
    raise MemoryError()
for i in xrange(len(_arr)):
    int_t[i] = _arr[i]

在此之后我有 int_t,其中我有整个数组。但我不希望它更通用并支持其他类型,而不仅仅是 int。我是否必须为每种类型做同样的事情,或者有什么通用的方法可以做到这一点?

4

1 回答 1

1

首先,您应该知道 numpy 数组支持相当多的数据类型。这是关于如何在 cython 中使用 numpy 数组的一般介绍。如果你想做数字的东西,应该做的伎俩。此外,numpy 确实支持 Python 对象数组。但是话又说回来,数组查找已经过优化,但与对象的交互却没有,因为它们仍然是 Python 对象。

如果您正在考虑对任意类型执行此操作,即将任意 Python 对象转换为某种 C 类型或 C++ 对象,您必须为每种类型手动执行此操作。这也是有道理的,因为潜在的动态数据结构和静态数据结构之间的自动转换并不总是显而易见的,尤其是对于编译器而言。

于 2013-08-09T12:21:08.387 回答