从数组结构?
我想快速填写尽可能少的副本,我从C中逐渐收到一长串结构。
如果我的结构只是主数据类型,如下所示:
cdef packed struct oh_hi:
int lucky
char unlucky
然后,以下工作正常:
DEF MAXPOWER = 1000000
cdef oh_hi * hi2u = <oh_hi *>malloc(sizeof(oh_hi)*MAXPOWER)
cdef oh_hi [:] hi2me = <oh_hi[:MAXPOWER]> hi2u
但是,一旦我改变我的结构来保存一个字符数组:
cdef packed struct oh_hi:
int lucky
char unlucky[10]
以前的内存视图转换编译,但运行时给出:
ValueError: Expected 1 dimension(s), got 1
在Cython中有没有简单的方法? 我知道我可以创建一个结构化数组,但是afaik,它不会让我直接将C结构分配给它。
实际上,只需构建一个结构化的numpy数组,然后使用memoryview即可。
cdef np.ndarray hi2u = np.ndarray((MAXPOWER,),dtype=[('lucky','i4'),('unlucky','a10')])
cdef oh_hi [:] hi2me = hi2u
这样的表现看起来相当不错,如果您需要将数据返回到python中,这可以节省以后的副本。 按照惯例,numpy版本非常好。 = p
链接地址: http://www.djcxy.com/p/14277.html下一篇: How to manage object lifetime when working with COM interop?