2016-09-19 4 views
2

Cholesky 분해를 통해 양의 정한 행렬을 반전하는 것이 np.linalg.inv(X)을 사용하는 것보다 빠르다는 것이 수학적으로 알려져 있습니다. 그러나 둘 모두를 실험했을 때 Cholesky 분해 성능이 더 나빠졌습니다.Cholesky 분해를 통해 양의 한정 행렬을 반전하는 것이 numpy의 정규 반전보다 느린 이유는 무엇입니까?

# Inversion through Cholesky 
p = X.shape[0] 
Ip = np.eye(p) 
%timeit scipy.linalg.cho_solve(scipy.linalg.cho_factor(X,lower=True), Ip) 

The slowest run took 17.96 times longer than the fastest. This could mean that an intermediate result is being cached. 
10000 loops, best of 3: 107 µs per loop 


# Simple inversion 
%timeit np.linalg.inv(X) 

The slowest run took 58.81 times longer than the fastest. This could mean that an intermediate result is being cached. 
10000 loops, best of 3: 25.9 µs per loop 

후자는 더 짧았다. 왜 이런거야? R에서 chol2inv(chol(X))은 일반적으로 solve(X)보다 빠릅니다.

+0

'p'란 무엇입니까? 방금'p = 1000'으로 시도해 보니 콜레 스키가 더 빨랐습니다. –

+0

@WarrenWeckesser 100으로 시도했습니다 ... 더 커지면 더 빠릅니까? –

+2

그럴 수 있습니다. 아마도 콜레 스키 방식은 약간의 오버 헤드가 있습니다. 이미 하나가 아닌 두 개의 함수 호출을 만들어야한다는 것을 이미 알 수 있습니다. 사실, 공정성을 위해 콜레 스키 방식의 타이밍에 'Ip'생성도 포함시켜야합니다. –

답변

0

나는 1000x1000 행렬에 대한 비교를 실행하고, 첼시 키를 통한 반전은 대략 두 배 빠릅니다.