2014-09-22 15 views
11

Tôi muốn làmCython C-mảng khởi

cdef int mom2calc[3] 
mom2calc[0] = 1 
mom2calc[1] = 2 
mom2calc[2] = 3 

một cách nhỏ gọn hơn. Tương tự như

cdef int mom2calc[3] = [1, 2, 3] 

cú pháp Cython không hợp lệ.

Lưu ý:

cdef int* mom2calc = [1, 2, 3] 

không phải là một lựa chọn vì tôi có thể không (tự động) chuyển đổi nó vào một cái nhìn bộ nhớ.

Trả lời

16
cdef int mom2calc[3] 
mom2calc[:] = [1, 2, 3] 

Điều này hoạt động trên các con trỏ thô (mặc dù nó không được kiểm tra giới hạn), chế độ xem bộ nhớ và mảng có kích thước cố định. Nó chỉ hoạt động trong một chiều, nhưng đó là thường đủ:

cdef int mom2calc[3][3] 
mom2calc[0][:] = [1, 2, 3] 
mom2calc[1][:] = [4, 5, 6] 
mom2calc[2][:] = [7, 8, 9] 
+0

Tôi có một [Cython bài] (http://stackoverflow.com/questions/41944883/verifying-compatibility-in-compiling-extension-types- và sử dụng-chúng-với-cdef) bạn có thể cung cấp thông tin chi tiết về. – Phillip