我在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"
(已经有更多的创意尝试) - 然而不幸的是它不起作用。
请帮忙。
答案 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数组。)
但这仍然是猜测你想做什么。