2016-04-01 33 views
1

Bellek görüntülemeleri kullanarak standart quicksort'u cython'da uygulamaya çalışıyorum.Cython bellek görüntülemesi hatası: Bellek görünümü için geçersiz indeks belirtildi

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 

birisi bana söyleyebilir ne yanlış yapıyorum:

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) 

Ben memoryview erişimiyle ilgili çoklu hataları olsun standart setup.py dosya ve python setup.py build_ext --inplace komutla derleme sırasında, Ancak: İşte benim kodudur? Ayrıca Cython için yeni olduğum için herhangi bir performans geliştirici ipuçları takdir edilecektir .. Teşekkürler!

cevap

2

Genellikle çiftler dizin olamaz (ints olmalıdır). Biliyorum ki bu problem ... ... cython hafıza görüntülerine aşina olmamamıza rağmen.

+0

Evet .. int'ye geçiş bu kodu derlememi sağladı. Ayrıca çalışmamı sağlamak için geçirilen numpy dizisindeki türü belirtmem gerekiyordu: 'np.array (l, dtype = np.int32)'. Belki de belliydi ama bunu belgelemede bulamadım, teşekkürler. –

+0

Sevindim Yardımcı olabilirim! – mwm314