2012-05-17 4 views
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], 할당에서 메모리를 복사하는 복사 속도가 느린 과정처럼 보이는

+1

C-API 호출에 많이 의존하고'rows' 또는'col'을 입력하지 않았기 때문에 cython으로 속도를 높이 지 못할 가능성이 있습니다. 처음부터'mat'의 크기를 안다면, 결정자를 하드 코딩하고'rM'을 빌드 할 수있을 것입니다. – JoshAdel

답변

1

. mat의 청크에 대한 기능 호출을 np.linalg.deg으로 간단히 설정하는 것이 가능합니까? 대신 복사하여 결정 사항을 계산하는 대신에?

관련 문제