如何在 Cython 中将 C++ 向量转换为 numpy 向量,同时最大限度地减少 Python 解释器的交互?



具体来说:

  • 如何将numpy.ndarray作为函数输出数据类型和
  • 如何使用cimport numpy而不是import numpy来创建没有 Python 开销的数组?

如果从行中删除numpy.ndarray,下面的代码有效cdef numpy.ndarray array(int start, int end):.根据注释,它仍然有很多 Python 开销(不包括C++向量的range(start, end)初始化(。

%%cython -a
# distutils: language = c++
import numpy
from libcpp.vector cimport vector

cdef numpy.ndarray array(int start, int end):
cdef vector[int] vect = range(start, end)
return numpy.array(vect)
print(array(1,15))

NumPy 数组是 Python 对象。如果您希望在编译级别使用它们,则应使用Cython支持的memoryviews。然后,您可以要求np.asarray(cython_memoryview_variable)转到 Python。

由于您的基本对象是一个C++向量,因此不会将其内容自动转换为 NumPy arrray,因此您必须显式地解决这个问题(以复制为代价(。

相关内容

最新更新