具体来说:
- 如何将
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,因此您必须显式地解决这个问题(以复制为代价(。