2016-09-19 18 views
2

在數學上已知通過Cholesky分解來反轉正定矩陣比僅使用np.linalg.inv(X)更快。然而,當我對兩者進行實驗時,結果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'試了一下,Cholesky更快。 –

+0

@WarrenWeckesser我嘗試過100 ...只是越來越大,它變得越來越大? –

+2

這可能是。也許Cholesky方法會有更多的開銷。您已經可以看到您必須進行兩次函數調用而不是一次。實際上,爲了公平起見,你還應該在Cholesky方法的時間中包括創建'Ip'。 –

回答

0

我對1000x1000矩陣進行了比較,通過Cholesky的反演速度大約快了一倍。