Cython memoryviews error: Invalid index for memoryview specified
Cython memoryviews error: Invalid index for memoryview specified
我正在尝试使用内存视图在 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 的新手,因此任何性能改进技巧都将不胜感激。谢谢!
通常双精度数不能是索引(应该是整数)。我认为这就是问题所在......虽然我承认不熟悉 cython 内存视图。
我正在尝试使用内存视图在 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 的新手,因此任何性能改进技巧都将不胜感激。谢谢!
通常双精度数不能是索引(应该是整数)。我认为这就是问题所在......虽然我承认不熟悉 cython 内存视图。