Tôi muốn có một đối tượng Cython "cdef" với thành viên NumPy và có thể sử dụng truy cập bộ đệm nhanh. Lý tưởng nhất, tôi sẽ làm một cái gì đó như:Khai báo bộ đệm Cython cho các thành viên đối tượng
import numpy as np
cimport numpy as np
cdef class Model:
cdef np.ndarray[np.int_t, ndim=1] A
def sum(self):
cdef int i, s=0, N=len(self.A)
for 0 <= i < N:
s += self.A[i]
return s
def __init__(self):
self.A = np.arange(1000)
Thật không may, Cython không thể biên dịch điều này, với lỗi Buffer types only allowed as function local variables
.
Cách giải quyết Tôi đang sử dụng là khai báo bộ đệm thuộc tính trên một biến địa phương mới, giao cho thành viên đối tượng:
cdef class Model:
cdef np.ndarray A
def sum(self):
cdef int i, s=0, N=len(self.A)
cdef np.ndarray[np.int_t, ndim=1] A = self.A
for 0 <= i < N:
s += A[i]
return s
này trở nên thực sự khó chịu nếu bạn muốn có nhiều phương pháp truy cập vào cùng một dữ liệu cấu trúc - có vẻ như một trường hợp sử dụng khá phổ biến, phải không?
Có giải pháp nào tốt hơn không yêu cầu khai báo lại các loại bên trong mọi phương pháp không?
cập nhật link http://www.mail-archive.com/[email protected]/msg05166.html – gg349
Điều này có làm mất hiệu suất không? – machen