Python中的密集Cholesky更新

use*_*403 7 python numpy matrix lapack factorization

任何人都可以指向一个库/代码,允许我在python(numpy)中对Cholesky分解进行低级更新吗?Matlab将此功能作为一种称为"cholupdate"的功能提供.LINPACK也有这个功能,但它(据我所知)尚未移植到LAPACK,因此不能用于scipy.

我发现scikits.sparse提供了一个基于CHOLMOD的类似函数,但我的矩阵很密集.

有没有可用于python的代码,'cholupdate'的功能与numpy兼容?

谢谢!

jcr*_*udy 5

这是一个 Python 包,它使用 Cython 对 Cholesky 因子进行 1 级更新和降级: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))
Run Code Online (Sandbox Code Playgroud)


Ben*_*min 1

这个人正在使用 scikit 和 numpy/scipy 做类似的事情。