gpt4 book ai didi

python - Cython Memoryviews——来自结构数组?

转载 作者:太空狗 更新时间:2023-10-29 21:55:23 25 4
gpt4 key购买 nike

我想用尽可能少的副本快速填充从 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 中是否有一种简单的方法可以做到这一点?我知道我可以创建一个结构化数组,但据我所知,这不允许我将 C 结构直接分配给它。

最佳答案

实际上,只需构建一个结构化的 numpy 数组,然后构建一个内存 View 就可以了。

cdef np.ndarray hi2u = np.ndarray((MAXPOWER,),dtype=[('lucky','i4'),('unlucky','a10')])
cdef oh_hi [:] hi2me = hi2u

这个的性能看起来相当不错,如果你需要在 python 中返回数据,这会保存一个以后的副本。和往常一样,numpy 版本非常好。 =p

关于python - Cython Memoryviews——来自结构数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17239091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com