6

我在 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

但赛通抱怨:

no_of_arrays < Not allowed in a constant expression

我尝试了几种方法来构造这个变量:

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

(有更多的创造性尝试) - 但是不幸的是它不起作用。

请帮忙。

4

1 回答 1

4

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

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

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 数组。)

但这仍然是在猜测您想要做什么。

于 2012-12-21T03:03:52.810 回答