Я пытаюсь ускорить функцию, которая вычисляет сумму всех элементов [целое число] справа от каждого элемента в матрице и проверяет, является ли сумма четной. Я пытался использовать Cython (представления памяти), но я делаю все хуже. : D
Я думаю, я не правильно понимаю определения типов, как я получаю, например, «Pyx_PyInt_From_npy_long» в html-файле для строки wm [i, j] = (gx [i:, j] .sum ())% 2, который я считал всем npy_long.
import numpy as np
cimport numpy as np
cimport cython
ctypedef np.int_t dtype_int
@cython.wraparound(False)
@cython.boundscheck(False)
def test_fun(np.ndarray[dtype_int,ndim=2] gx_in, dtype_int n):
# Declarations
cdef dtype_int i,j
cdef dtype_int[:,:] gx
cdef dtype_int[:] gx_slice
gx = gx_in
# Init Array
wm_init = np.zeros((n,n), dtype = np.int)
cdef dtype_int[:,:] wm = wm_init
# Loop
for i in range(n):
for j in range(n):
gx_slice = gx[i:,j]
wm[i,j] = np.sum(gx_slice)%2
return wm
Я использовал np.sum () вместо .sum () (который был быстрее), потому что объект memoryviewslice, по-видимому, не имеет атрибута sum.