Cython 引用 numpy 数组中的插槽



我有一个带有numpy数组实例变量的对象。

在一个函数中,我想声明对该 numpy 数组中插槽的本地引用。

例如,

cdef double& x1 = self.array[0]

原因是,我不想花时间实例化新变量和复制值。

显然上面的代码不起作用。 不支持有关 c++ 样式引用的某些内容。 我该怎么做我想做的事情?

不支持

将C++引用作为局部变量(即使在Cython的C++模式下(,因为它们需要在创建时初始化,并且Cython更喜欢生成如下代码:

# start of function
double& x_ref
# ...
x_ref = something # assign
# ...

这确保了变量作用域的行为方式是"Python方式",而不是"C++方式"。这确实意味着一切都需要默认可构造。


但是,C++引用通常是根据指针实现的,因此解决方案只是自己使用指针:

cdef double* x1 = &self.array[1]
x1[0] = 2 # use [0] to dereference pointer

显然,C++引用使语法更好(您不必担心取消引用和获取地址(,但在性能方面应该是相同的。

最新更新