cython与指针数组

时间:2012-12-21 02:36:10

标签: python numpy cython

我在python中有一个numpy.ndarrays(具有不同长度)的列表,需要能够非常快速地访问python中的那些。我认为一系列指针可以解决这个问题。我试过了:

float_type_t* list_of_arrays[no_of_arrays]
for data_array in python_list_of_arrays:
    list_of_arrays[0] = data_array

但是cython抱怨道:

no_of_arrays < Not allowed in a constant expression

我已经尝试了几种方法来满足这个变量:

cdef extern from *:
    ctypedef int const_int "const int"

(已经有更多的创意尝试) - 然而不幸的是它不起作用。

请帮忙。

1 个答案:

答案 0 :(得分:4)

为什么不使用numpy对象数组而不是数组列表?

我认为您遇到的问题是因为您在堆栈中声明list_of_arrays,并且必须在编译时知道它的大小。您可以尝试一些dynamic allocation,如下所示:

from libc.stdlib cimport malloc, free

cdef float_type_t *list_of_arrays = \
    <float_type_t *>malloc(no_of_arrays * sizeof(float_type_t*))

for i in range(no_of_arrays):
    list_of_arrays[i] = &(data_array[i].data)

# don't forget to free list_of_arrays!

(这假定data_array是一个numpy数组。)

但这仍然是猜测你想做什么。