2014-09-22 19 views
11

Chciałbym zrobićCython inicjalizacji C-array

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

w sposób bardziej zwarty. Coś podobnego do

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

która jest niepoprawną składnią Cythona.

Uwaga:

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

nie jest opcją, ponieważ nie może (automatycznie) przekształca się do widoku pamięci.

Odpowiedz

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

Działa na surowych wskaźnikach (chociaż nie jest wtedy sprawdzane), widokach pamięci i macierzach o ustalonych rozmiarach. To działa tylko w jednym wymiarze, ale to dość często:

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

Mam Cython [post] (http://stackoverflow.com/questions/41944883/verifying-compatibility-in-compiling-extension-types- i-using-them-with-cdef) może być w stanie zapewnić wgląd. – Phillip