gpt4 book ai didi

python - 转换为指向 Cython 扩展类的指针

转载 作者:太空宇宙 更新时间:2023-11-03 11:00:30 25 4
gpt4 key购买 nike

我是 Cython 的新手,所以请多多包涵。我正在尝试将一些数据转换为指向扩展类的指针。该类本质上是一个美化的结构。它在我的 .pxd 文件中声明为:

cdef class Field:

cdef:
np.float64_t u # x velocity
np.float64_t v # y velocity
np.float64_t w # z velocity

cdef update(self)

当然,这是在 .pyx 文件中实现的。在我的驱动程序代码中,我有一个 np.float64_t 的 4 维数组。前三个维度表示 x、y 和 z。第四个维度应该表示这三个值 u, v, w。我在纯 Python 驱动程序中分配网格,然后将网格传递给 Cython 文件。在 Cython 文件中,我投了:

curr_grid_element = (<Field *> &grid[xx, yy, zz, 0])
curr_grid_element.update()

但是当我这样做时,我得到了错误:Pointer base type cannot be a Python object

这让我很困惑,因为我认为 Field 是纯 C 语言。

最佳答案

赛通 extension types不要转化为 c 结构,它们转化为 python 内置类型。在高层次上,这意味着 Field 是一个恰好用 C 实现的 python 类,例如 listndarray。在较低级别,cython 确实使用 c 结构来实现扩展类型,但这些结构具有您没有考虑的字段。即用于跟踪其类型的字段和用于引用计数的花药(也许还有其他一些字段)。

我认为你想要的是结构,而不是扩展类型。试试这个:

cdef struct Field:
np.float64_t u # x velocity
np.float64_t v # y velocity
np.float64_t w # z velocity

关于python - 转换为指向 Cython 扩展类的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33745905/

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