在Python中访问类型化memoryview的数据缓冲区

时间:2015-02-18 19:26:16

标签: pointers cython memoryview

我有一个函数期待Cython中的数组指针,例如带有签名

cdef void foo(DTYPE_t* x)

和一个函数,它接收一个类型化的内存视图,我想从中调用第一个函数,例如:

def bar(DTYPE_t[:,::1] X not None):
    foo(X[0])

自然甚至没有编译。我现在已经尝试了几个小时来找出一种方法来访问内存视图下面的数据指针,例如X.data

有没有办法实现这个目标?遗憾的是,我无法使foo能够接受记忆观察。

2 个答案:

答案 0 :(得分:2)

你想要这个:

foo(&X[0,0])

答案 1 :(得分:1)

解决方案很简单,非常尴尬

&X[i,j]

即。电话会变成

foo(&X[i,0])

顺便说一下,这也适用于旧式numpy数组,它们被初始化为

object[int, ndim=2, mode='strided'] X

PS:如果您想传递C数组,则需要X[i][j],这同样适用于类型化的内存视图。