2014-09-22 76 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-并且使用他们与cdef)你可能能够提供洞察力。 – Phillip 2017-01-31 20:48:47