我是一名新手,刚开始接触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()
但是当我这样做时,我会收到错误:
指向基类型不能是Python对象
。这让我很困惑,因为我认为
Field
是纯C编写的。
Field
是一个 C 结构体,其中包含了您指定的字段 u、v 和 w,但它还包含了标准的 Python 引用计数机制。因此,您不能真正将一个grid
数组重新解释为一个Field
,因为它不包含相同的引用计数字段。 - DavidW