在Cython中声明numpy数组的列表/向量/数组

时间:2017-01-23 15:50:34

标签: python numpy cython

说我有几个阵列,可能有不同的大小:

A0 = rand(3,3)
A1 = rand(4,4)

在Cython中,我可以声明他们的类型以获得快速项目访问权限:

cdef np.ndarray[double, ndim=2] A0
cdef np.ndarray[double, ndim=2] A1

但是,我想通过索引访问它们:

A = (A0,A1)
A[0][2,1] += A[1][1,0]

然而,现在Cython并不知道A[0]A[1]的类型,这会使访问速度变慢。我不认为Cython有一个"类型元组"的概念。那么如何声明A(或类似对象)以便我仍然可以在上面的表达式中获得快速项目访问权限?

1 个答案:

答案 0 :(得分:1)

这是否有效cython是推测性的,但受到最后cython示例的启发:

https://docs.scipy.org/doc/numpy/reference/arrays.nditer.html#putting-the-inner-loop-in-cython

我建议:

cdef foo(aTuple):
    cdef np.ndarray[double, ndim=2] A0
    cdef np.ndarray[double, ndim=2] A1
    A0, A1 = aTuple    # use unpacking
    A0[2,1] += A1[1,0]    

https://github.com/cython/cython/blob/master/tests/run/unpack.pyx - 是解压缩测试pyx

或者可以使用A0 = aTuple[0]A1 = aTuple[1];我们的想法是在重要的地方使用数组输入,用于自己的索引。元组只有指针,因此输入并不重要。

使用cython中的数组时,另一个有用的页面是http://cython.readthedocs.io/en/latest/src/userguide/memoryviews.html