我知道这个question,但我正在寻找一种更简单的方法来从C数组生成2d内存视图。由于我是C和Cython的noobie,有人可以请解释一下为什么
cdef int[:, :] get_zeros(int d): # get 2-row array of zeros with d as second dimension cdef int i cdef int *arr = <int *> malloc(sizeof(int) * d) for i in range(d): arr[i] = 0 cdef int[:, :] arr_view arr_view[0, :] = <int[:d]>arr arr_view[1, :] = <int[:d]>arr return arr_view
不起作用?
[编译时,我得到Cannot assign type 'int[::1]' to 'int'
作为错误。这是否意味着2d内存视图被第一个Assign语句折叠到1d,还是因为memoryview需要连续的块等?
我知道这个问题,但是我正在寻找一种更简单的方法来从C数组生成2d内存视图。由于我是C和Cython的新手,所以有人可以解释一下为什么cdef int [:,...
显然,“解释为什么某事不起作用”非常困难,因为最终这只是一个设计决定,可以采取不同的方式。但是:
除了@DavidW提供的精彩答案之外,我还想添加更多信息。在您包含的代码中,我看到您正在分配一个int数组,然后在for循环中将内容清零。实现此目的的更方便的方法是改为使用C的calloc函数,该函数可以保证指向零位内存的指针,并且此后不需要for循环。