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))
である。
「p」とは何ですか?私は 'p = 1000'で試してみたところ、コレスキーは速かったです。 –
@WarrenWeckesser私は100で試しました...それが大きくなるにつれて高速ですか? –
そうかもしれません。おそらくコレスキーメソッドにはもう少しオーバーヘッドがあります。既に1つではなく2つの関数呼び出しを行う必要があることがわかります。実際、公正であるためには、Choleskyメソッドのタイミングで 'Ip'の生成も含めるべきです。 –