Инициализация C-массива Cython

Я хотел бы сделать

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]

не является опцией, потому что я не могу (автоматически) преобразовать его в представление памяти.

Ответ 1

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]

Ответ 2

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

Вот как это должно быть сделано. Пример инициализации массива C в тестах Cython, например: здесь.