相关疑难解决方法(0)

将memoryview传递给C函数

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

void getIndexOfState(long *p, long C, long G, long B, long *state);
Run Code Online (Sandbox Code Playgroud)

现在我的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
Run Code Online (Sandbox Code Playgroud)

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

我试过了:

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

当我试图编译模块时,它引发了"无法将类型'long [:]'分配给'long*'"错误.在调用C函数之前,有没有办法传递该指针而不将内存视图强制回到numpy数组?

python numpy cython

17
推荐指数
1
解决办法
3479
查看次数

np.ascontiguousarray与使用Cython的np.asarray

关注如何正确传递numpy数组到Cython函数的问题?:

当在Cython中将numpy.ndarrays传递给只处理连续数组的C函数时,执行以下操作之间是否有区别:

np.ndarray[double, ndim=1, mode="c"] arr = np.ascontiguousarray(np.array([1,2,3],dtype=float))
Run Code Online (Sandbox Code Playgroud)

np.ndarray[double, ndim=1, mode="c"] arr = np.asarray(np.array([1,2,3],dtype=float), order="c")
Run Code Online (Sandbox Code Playgroud)

都有必要吗?是否np.ascontiguous暗示数组将采用可以通过mode=c声明分配给数组的格式?

c python arrays numpy cython

6
推荐指数
2
解决办法
4117
查看次数

标签 统计

cython ×2

numpy ×2

python ×2

arrays ×1

c ×1