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)
更快。
什麼是'p'?我只是用'p = 1000'試了一下,Cholesky更快。 –
@WarrenWeckesser我嘗試過100 ...只是越來越大,它變得越來越大? –
這可能是。也許Cholesky方法會有更多的開銷。您已經可以看到您必須進行兩次函數調用而不是一次。實際上,爲了公平起見,你還應該在Cholesky方法的時間中包括創建'Ip'。 –