2014-09-22 2 views
11

Я хотел бы сделатьCython инициализации C-массив

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

в более компактном виде. Нечто похожее на

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

, который является недействительным синтаксисом Cython.

Примечание:

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

это не вариант, потому что я не могу (автоматически) превратили его в вид памяти.

ответ

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

Это работает с необработанными указателями (хотя это не проверяется, а затем), видами памяти и массивами фиксированного размера. Она работает только в одном измерении, но это достаточно часто:

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

У меня есть [Cython пост] (http://stackoverflow.com/questions/41944883/verifying-compatibility-in-compiling-extension-types- и-using-them-with-cdef), вы можете дать представление. – Phillip

Смежные вопросы