7

我用成语

 size_x, size_y, size_z = some_array.shape

在处理 numpy 数组时经常发生。当有问题的数组具有类型时,同样的事情在 Cython 中似乎不起作用,例如

 def someFunc(np.ndarray[np.float32_t, ndim=2] arr):
      sx, sy = arr.shape

我们最终会出现编译错误,例如

  Cannot convert 'npy_intp *' to Python object

这可能是因为“shape”被转换为 C 数组(为了更快地访问),所以它不再是一个元组。

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

4

1 回答 1

4

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

cdef int sx, sy
sx = arr.shape[0]
sy = arr.shape[1]

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

于 2012-11-06T02:25:11.097 回答