【发布时间】:2013-06-21 15:33:33
【问题描述】:
我想用尽可能少的副本快速填充我从 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]
之前的 memoryview 转换编译但运行时给出:
ValueError: Expected 1 dimension(s), got 1
在 Cython 中是否有一种简单的方法可以做到这一点?我知道我可以创建一个结构化数组,但是 afaik,这不会让我将 C 结构直接分配给它。
【问题讨论】:
-
这似乎与带有 numpy 结构化数组的 this issue 非常相似。问题是如果结构中的第一项是标量,cython 似乎不喜欢将数组与标量值混合。解决方法是重新排列结构中的项目,以便始终首先有一个数组成员/项目。