将memoryview传递给C函数

2024-04-19 21:53:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个C函数声明如下:

void getIndexOfState(long *p, long C, long G, long B, long *state);

现在我的cython包装器代码使用numpy数组的缓冲区语法:

^{pr2}$

我想使用新的memoryview语法,我的问题是,在使用memoryview时,如何传递指向数据的指针?在

我试过了:

cpdef int getIndexOfState(self, long[:] s):
    cdef long out
    getIndexOfState(&out, self.C, self.G, self.B, s)
    return out

当我试图编译模块时,它引发了“Cannot assign type'long[:]”到“long*”错误。在调用C函数之前,有什么方法可以在不强制memoryview返回numpy数组的情况下传递指针?在


Tags: 函数代码selfnumpy声明语法数组out
1条回答
网友
1楼 · 发布于 2024-04-19 21:53:36

如果底层数据是properly contiguous/strided,并且内存中至少有一个元素,那么它应该足以传递指向第一个元素的指针(可能还有长度):

getIndexOfState(&out, self.C, self.G, self.B, &s[0])

编辑:

确保“适当相邻”的一种方法应该是添加“[::1]”。在

^{pr2}$

相关问题 更多 >