我有一个在cython中的列表,并希望切片而不使用python对象(为了速度)。如何在cython中切片列表
cdef int len = 100
cdef int *q
cdef int *r
q = <int *>malloc(len *cython.sizeof(int))
r = q[50:]
和得到这个错误:
r = q[50:]
^
------------------------------------------------------------
hello.pyx:24:9: Slicing is not currently supported for 'int *'.
有一个有效的方式来做到这一点? “......目前不支持......”让我有点害怕。 我使用cython 0.18
'q'不是一个列表,而是一个本地数组。我猜你必须使用较低级别的东西来处理这些问题。 (围绕一个数组和一个start + end索引。) – millimoose 2013-02-12 19:29:27
@millimoose我看看在doc中的memoryview的东西,但我无法使它与我的简单示例一起工作。我是新的cython和C编程。你是什么意思让你谈论低层和“传递数组和开始+结束索引”? thanx – 2013-02-12 19:48:45
在C中,当处理数组时,通常不只是使用数组,而是使用'start'和'length'参数来指示函数应该工作的数组部分。数组和两个索引一起表示一个“切片”。 (如果你看一些快速排序的例子,你可以看到这个例子。)也就是说,这对Cython来说可能是过分的矫枉过正,我对此并不熟悉。 – millimoose 2013-02-12 19:58:50