2014-09-22 6 views
11

desidero fareCython C-array inizializzazione

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

in modo più compatto. Qualcosa di simile a

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

che è una sintassi Cython non valida.

Nota:

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

non è un'opzione, perché non posso (automaticamente) è convertito in una vista della memoria.

risposta

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

Questo funziona su puntatori prime (non sebbene sia limiti allora controllato), viste memoria e array di dimensione fissa. Funziona solo in una dimensione, ma questo è abbastanza spesso:

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

Ho un [annuncio Cython] (http://stackoverflow.com/questions/41944883/verifying-compatibility-in-compiling-extension-types- e-usando-loro-con-cdef) potresti essere in grado di fornire informazioni su. – Phillip