簡體   English   中英

在Cython中聲明numpy數組的列表/向量/數組

[英]Declaring a list/vector/array of numpy arrays in 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 (或類似的對象),以便在上述表達式中仍能快速訪問項目?

這是否是有效的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM