我具有以下功能
%%cython
cdef cytest(double[:,:] arr):
return print(arr.shape)
def pytest(arr):
return cytest(arr)
我使用以下numpy数组
运行pytestdummy = np.ones((2,2))
pytest(dummy)
我得到以下结果
[2, 2, 0, 0, 0, 0, 0, 0]
答案 0 :(得分:1)
这是因为在C
中,数组具有固定的形状。 cython
数组可具有的最大维数为8。Cython将数组的所有维存储在此定长数组中。
可以通过执行以下操作对此进行验证:
%%cython
cdef cytest(double[:,:,:,:,:,:,:,:,:] arr): # works up to 8 ':'
return arr.shape
def pytest(arr):
return cytest(arr)
编译时,会引发以下错误:
Error compiling Cython file:
------------------------------------------------------------
...
cdef cytest(double[:,:,:,:,:,:,:,:,:] arr):
^
------------------------------------------------------------
/path/to/_cython_magic_9a9aea2a10d5eb901ad6987411e371dd.pyx:1:19: More dimensions than the maximum number of buffer dimensions were used.
这实际上意味着预设的最大尺寸为8,我假设您可以通过更改cython_magic源文件来更改它。