Tag: memoryview

如何在Cython中动态声明2D c数组

我需要使用各种大小的2D numpy数组执行大量工作,我想将这些计算卸载到cython上。 我的想法是我的2D numpy数组将从python传递到cython,在那里它将被转换为c-array或内存视图,并用于其他c级函数的级联中进行计算。 经过一些分析后,由于一些严重的python开销,我排除了在cython中使用numpy数组。 使用内存视图更快,更容易使用,但我怀疑我可以使用c-arrays进一步加速。 这是我的问题 – 如何在没有使用设定值预定义其尺寸的情况下在cython中声明2D c数组? 例如,我可以通过这种方式从numpy创建一个c-array: narr = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]], dtype=np.dtype(“i”)) cdef int c_arr[3][4]: for i in range(3): for j in range(4): c_arr[i][j] = narr[i][j] 然后将其传递给函数: cdef void somefunction(int c_Arr[3][4]): … 但这意味着我有一个固定的数组sizde,在我的情况下将是无用的。 所以我尝试过这样的事情: narr = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]], dtype=np.dtype(“i”)) cdef int a = np.shape(narr)[0] cdef int b = np.shape(narr)[1] cdef int c_arr[a][b]: # […]