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)
보다 빠릅니다.
'p'란 무엇입니까? 방금'p = 1000'으로 시도해 보니 콜레 스키가 더 빨랐습니다. –
@WarrenWeckesser 100으로 시도했습니다 ... 더 커지면 더 빠릅니까? –
그럴 수 있습니다. 아마도 콜레 스키 방식은 약간의 오버 헤드가 있습니다. 이미 하나가 아닌 두 개의 함수 호출을 만들어야한다는 것을 이미 알 수 있습니다. 사실, 공정성을 위해 콜레 스키 방식의 타이밍에 'Ip'생성도 포함시켜야합니다. –