1
작은 행렬의 미성년자를 계산하기 위해 numpy/cython 프로그램을 작성하고 있습니다. (매트 WRT의 사소한를 계산 II를 행하기 위해, COL의 JJ.)처럼배열 부분을 효율적으로 삭제하는 방법
나의 현재 기능은 같습니다 조금 벤치마킹 후
cdef float minor(np.ndarray[DTYPE_t, ndim = 2] mat,int ii,int jj):
rows = range(mat.shape[0])
col = range(mat.shape[0])
del rows[ii]
del col[jj]
cdef np.ndarray[DTYPE_t, ndim = 2] rM = (mat[rows])[:,col]
cdef float val = (-1)**(ii+jj) * np.linalg.det(rM)
return val
,
cdef np.ndarray[DTYPE_t, ndim = 2] rM = (mat[rows])[:,col]
오히려 많은 시간이 소요되는 라인을 . 2 차원 배열에서 한 행과 한 열을 제거하는 더 좋은 방법이 있습니까?
너의 것,
cp3028 당신이 (mat[rows])[:,col]
, 할당에서 메모리를 복사하는 복사 속도가 느린 과정처럼 보이는
C-API 호출에 많이 의존하고'rows' 또는'col'을 입력하지 않았기 때문에 cython으로 속도를 높이 지 못할 가능성이 있습니다. 처음부터'mat'의 크기를 안다면, 결정자를 하드 코딩하고'rM'을 빌드 할 수있을 것입니다. – JoshAdel