2016-09-19 14 views
2

コレスキー分解による正定値行列の反転は、単に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では、通常solve(X)よりも速い。chol2inv(chol(X))である。

+0

「p」とは何ですか?私は 'p = 1000'で試してみたところ、コレスキーは速かったです。 –

+0

@WarrenWeckesser私は100で試しました...それが大きくなるにつれて高速ですか? –

+2

そうかもしれません。おそらくコレスキーメソッドにはもう少しオーバーヘッドがあります。既に1つではなく2つの関数呼び出しを行う必要があることがわかります。実際、公正であるためには、Choleskyメソッドのタイミングで 'Ip'の生成も含めるべきです。 –

答えて

0

私は1000x1000の行列で比較を行い、Choleskyによる逆変換は約2倍高速でした。

関連する問題