Python 是否可以通过引用将numpy数组传递给cpdef函数?

Python 是否可以通过引用将numpy数组传递给cpdef函数?,python,numpy,cython,Python,Numpy,Cython,是否可以编写一个Cython函数,其中numpy数组通过引用传递(可能是内存视图?),我可以在Python中使用该函数 我试过: cpdef void my_function(bytes line, int& counter, np.ndarray[np.uint32_t, ndim=2]& sums): ... ... 这里,计数器和总和将通过引用传递。我对后者感兴趣(但很乐意接受关于两者的批评和建议) 编译器抛出: Reference base type c

是否可以编写一个Cython函数,其中numpy数组通过引用传递(可能是内存视图?),我可以在Python中使用该函数

我试过:

cpdef void my_function(bytes line, int& counter, np.ndarray[np.uint32_t, ndim=2]& sums):
    ...
    ...
这里,
计数器
总和
将通过引用传递。我对后者感兴趣(但很乐意接受关于两者的批评和建议)

编译器抛出:

Reference base type cannot be a Python object
我也收到了与cdef相同的信息,我不了解问题的全部病因。

是-有点

Numpy数组是Python对象。无论如何,所有Python对象都是“通过引用”传递的(即,如果在函数内部更改Numpy数组的内容,则在函数外部更改它)

所以你就这么做

cpdef void my_function(bytes line, int& counter, np.ndarray[np.uint32_t, ndim=2] sums):
<>将它指定为C++引用并没有多大意义。对于Python对象,Cython对您隐藏了相当多的细节


但是,
cpdef
函数被设计为可以从Python和Cython调用。Python整数(和其他数字类型)。因此,当从Python调用时,更改
计数器
将不会像您所想的那样工作,如果它做了您希望的事情,则可能会破坏解释器

因此,我会避免在
cpdef
函数中使用引用(并且可能大部分情况下会完全避免
cpdef
函数-通常最好只决定
def
cdef

是-有点

Numpy数组是Python对象。无论如何,所有Python对象都是“通过引用”传递的(即,如果在函数内部更改Numpy数组的内容,则在函数外部更改它)

所以你就这么做

cpdef void my_function(bytes line, int& counter, np.ndarray[np.uint32_t, ndim=2] sums):
<>将它指定为C++引用并没有多大意义。对于Python对象,Cython对您隐藏了相当多的细节


但是,
cpdef
函数被设计为可以从Python和Cython调用。Python整数(和其他数字类型)。因此,当从Python调用时,更改
计数器
将不会像您所想的那样工作,如果它做了您希望的事情,则可能会破坏解释器


因此,我会避免在
cpdef
函数中使用引用(并且可能会完全避免
cpdef
函数-通常最好只决定
def
cdef

告诉我们有关数组的信息
shape
,尤其是
dtype
@hpaulj
无符号整数
shape=(76 x 74)
告诉我们数组的情况吗<代码>形状,尤其是
数据类型
@hpaulj
无符号整数
形状=(76 x 74)