Cython memoryviews错误:指定的memoryview的索引无效

时间:2016-04-01 01:15:49

标签: python cython memoryview

我正在尝试使用内存视图在cython中实现标准快速排序。这是我的代码:

def quicksort_cython(double[:] l):
    _quicksort(l, 0, len(l) - 1)


cdef void _quicksort(double[:] l, double start, double stop):
    cdef double pivot, left, right, tmp
    if stop - start > 0:
        pivot = l[start]
        left = start
        right = stop
        while left <= right:
            while l[left] < pivot:
                left += 1
            while l[right] > pivot:
                right -= 1
            if left <= right:
                tmp = l[left]
                l[left] = l[right]
                l[right] = tmp
                left += 1
                right -= 1
        _quicksort(l, start, right)
        _quicksort(l, left, stop)

但是,在使用标准setup.py文件和python setup.py build_ext --inplace命令进行编译期间,我收到有关内存视图访问的多个错误:

Error compiling Cython file:
------------------------------------------------------------
...


cdef void _quicksort(double[:] l, double start, double stop):
    cdef double pivot, left, right, tmp
    if stop - start > 0:
        pivot = l[start]
                      ^
------------------------------------------------------------

quicksort_cython_opt3.pyx:9:23: Invalid index for memoryview specified

有人能告诉我我做错了什么吗?此外,任何提高性能的提示都会受到赞赏,因为我是Cython的新手。谢谢!

1 个答案:

答案 0 :(得分:2)

通常双打不能成为指数(应该是整数)。我认为这是问题所在......虽然我确实不熟悉cython记忆视图。