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

时间:2018-08-29 00:37:35

标签: python numpy cython

具体地说:

  • 如何提供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))

1 个答案:

答案 0 :(得分:0)

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

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