Cython numpy数组形状,元组赋值

Lat*_*ius 7 python numpy cython

我用这个成语

 size_x, size_y, size_z = some_array.shape
Run Code Online (Sandbox Code Playgroud)

经常在处理numpy数组时.当所讨论的数组具有类型时,同样的事情在Cython中似乎不起作用,例如

 def someFunc(np.ndarray[np.float32_t, ndim=2] arr):
      sx, sy = arr.shape
Run Code Online (Sandbox Code Playgroud)

我们最终得到了一个编译错误

  Cannot convert 'npy_intp *' to Python object
Run Code Online (Sandbox Code Playgroud)

这可能是"shape"转换为C数组(为了更快访问)这一事实的结果,所以它不再是一个元组.

即使在Cython中,是否有可能以某种方式提取这个元组?(或者我应该坚持sx, sy = arr.shape[0], arr.shape[1]?)

Jos*_*del 5

我相信你是正确的,处理这个问题的直接方法是这样的:

cdef int sx, sy
sx = arr.shape[0]
sy = arr.shape[1]
Run Code Online (Sandbox Code Playgroud)

我不知道还有其他方法可以做到这一点,这是我在自己的代码中使用的约定。