【问题标题】:cython with array of pointers带有指针数组的 cython
【发布时间】:2012-12-21 02:36:10
【问题描述】:

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

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

请帮忙。

【问题讨论】:

    标签: python numpy cython


    【解决方案1】:

    为什么不使用 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 数组。)

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

    【讨论】:

    • 您好 Tiago,在单独访问每个数组时没有任何 python 开销对我来说很重要。目前它们位于一个列表中,我经常需要在它们之间切换,这非常耗费时间。
    • 所以我尝试了对象 nparray - 这就是要走的路。欢呼
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2021-08-03
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多