2013-01-06 18 views
6

Próbuję przenieść kod pythonowy do cythonu i napotykam na drobne problemy.tablica numpy z cythonami

Poniżej widzimy fragment kodu (uproszczony przykład) kodu.

cimport numpy as np 
cimport cython 
@cython.boundscheck(False) # turn of bounds-checking for entire function 
@cython.wraparound(False) 
@cython.nonecheck(False) 
def Interpolation(cells, int nmbcellsx): 
    cdef np.ndarray[float,ndim=1] celle 
    cdef int cellnonzero 
    cdef int i,l 
    for i in range(nmbcellsx): 
      celle = cells[i].e 
      cellnonzero = cells[i].nonzero 
      for l in range(cellnonzero): 
       celle[l] = celle[l] * celle[l] 

Nie rozumiem dlaczego najbardziej wewnętrzna-pętla nie w pełni przełożyć na kod C (czyli ostatnia linia, Celle [l] = ...), patrz wyjście z cython -a feedback:

enter image description here

Czego mi tu brakuje?

Wielkie dzięki.

+1

Obraz jest nieco trudny do odczytania - Kopiowanie i wklejanie odpowiedniego fragmentu byłoby łatwiejsze ... –

+0

Jaki masz kompilator c? Czy "celle [l] * = celle [l]" to samo? – denis

Odpowiedz

1

W końcu zrozumiałem, że prosty "powrót 0" na samym końcu funkcji rozwiązuje ten problem. Jednak zachowanie to wydaje mi się dość dziwne. Czy to rzeczywiście błąd?