numpy - 将memoryview传递给C 函数

  显示原文与译文双语对照的内容
0 0

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

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

如今我cython包装代码使用缓冲区中的语法numpy数组:

cpdef int getIndexOfState(self, np.ndarray[np.int_t, ndim=1, mode="c"] s):
    cdef long out
    getIndexOfState(&out, self.C, self.G, self.B, <long*> s.data)
    return out

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

我试过:

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

这throw " 无法分配类型'long[:]'到'long*'" 错误当我试着编译该模块。 有什么办法通过该指针,没有强迫的memoryview回numpy数组,然后再调用C 功能?

时间:原作者:1个回答

0 0

如果基础数据已正确 contiguous/strided 和至少有一个元素在内存中,那么它应该适合于传递一个指针,它指向第一个元素( 也许长度) :

getIndexOfState(&out, self.C, self.G, self.B, &s[0])
原作者:
...