2
我有一個cython代碼,其數據(M
)和numpy.ndarray
的索引(Ixs
)需要2d numpy.ndarray
。它遍歷Ixs
的條目並使用Ixs
的值ix
來索引M
的列。請參見下面的代碼:應該將索引的Cython內存視圖的類型爲Py_ssize_t或int?
def foo(double[:, ::1] M, int[:, ::1] Ixs):
cdef int rows = M.shape[0]
cdef int cols = M.shape[1]
cdef Py_ssize_t c, r
for c in range(rows):
for r in range(cols):
ix = Ixs[c, r]
dosomething(M[c, ix])
我知道我應該使用Py_ssize_t
作爲一個類型的索引(我讀它是爲了配合64位體系結構),但現在我使用類型的內存視圖int
...在這種情況下,我看不到創建Py_ssize_t
的numpy.ndarray
的方法,因此ix
是Py_ssize_t
。
寫這個cython代碼的正確方法是什麼?使用int
有什麼問題嗎?
所以我們可以說,我投它在Python np.intp('IXS = Ixs.atype(np.intp)'),那麼我改寫這個功能:'高清foo(double [:, :: 1] M,Py_ssize_t [:, 1] Ixs):'對嗎? – Gioelelm
是的,儘管理想的'Ixs'在創建時輸入了intp來避免劇組。 – chrisb
當然,但在我的情況下,它將是一個scikit學習函數的輸出。 – Gioelelm