8

Python(numpy)でCholesky分解で低ランクの更新を実行できるようにするライブラリ/コードを教えてもらえますか?Matlab は、この機能を「cholupdate」と呼ばれる関数として提供しています。LINPACKにもこの機能がありますが、(私の知る限り)まだLAPACKに移植されていないため、scipyなどでは利用できません。

scikits.sparse が CHOLMOD に基づいて同様の機能を提供することがわかりましたが、私の行列は密です。

numpy と互換性のある「cholupdate」の機能を備えた Python で使用できるコードはありますか?

ありがとう!

4

3 に答える 3

5

これは、Cython を使用してコレスキー因子のランク 1 更新とダウンデートを行う Python パッケージです: https://github.com/jcrudy/choldate

例:

from choldate import cholupdate, choldowndate
import numpy

#Create a random positive definite matrix, V
numpy.random.seed(1)
X = numpy.random.normal(size=(100,10))
V = numpy.dot(X.transpose(),X)

#Calculate the upper Cholesky factor, R
R = numpy.linalg.cholesky(V).transpose()

#Create a random update vector, u
u = numpy.random.normal(size=R.shape[0])

#Calculate the updated positive definite matrix, V1, and its Cholesky factor, R1
V1 = V + numpy.outer(u,u)
R1 = numpy.linalg.cholesky(V1).transpose()

#The following is equivalent to the above
R1_ = R.copy()
cholupdate(R1_,u.copy())
assert(numpy.all((R1 - R1_)**2 < 1e-16))

#And downdating is the inverse of updating
R_ = R1.copy()
choldowndate(R_,u.copy())
assert(numpy.all((R - R_)**2 < 1e-16))
于 2013-02-17T21:48:17.867 に答える
1

この男は、scikits と numpy/scipy を使用して同様のことを行っています。

于 2012-01-03T18:12:13.543 に答える