2013-01-06 41 views
6

Tôi đang cố gắng chuyển một số mã python sang cython và tôi gặp phải một số vấn đề nhỏ.mảng numpy với cython

Dưới đây bạn sẽ thấy đoạn mã (ví dụ đơn giản) của mã.

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] 

Tôi không hiểu tại sao các nội nhất vòng lặp không đầy đủ dịch mã C (tức là dòng cuối cùng, celle [l] = ...), xem ra từ cython -a feedback:

enter image description here

Tôi thiếu gì ở đây?

Cảm ơn rất nhiều.

+1

Hình ảnh đó hơi khó đọc - Sao chép và dán bit có liên quan sẽ dễ dàng hơn ... –

+0

Trình biên dịch c nào bạn có? Có phải 'celle [l] * = celle [l]' giống nhau không? – denis

Trả lời

1

Cuối cùng tôi đã nhận ra rằng "trở lại 0" đơn giản ở phần cuối của hàm sẽ giải quyết vấn đề này. Tuy nhiên, hành vi này có vẻ hơi lạ với tôi. Đây thực sự là một lỗi?