我有一個在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