gpt4 book ai didi

python - Python 中的密集 Cholesky 更新

转载 作者:太空狗 更新时间:2023-10-29 21:44:20 27 4
gpt4 key购买 nike

谁能给我指出一个库/代码,让我可以在 python (numpy) 中对 Cholesky 分解执行低阶更新?Matlab 将此功能作为称为“cholupdate”的函数提供。LINPACK 也有这个功能,但它(据我所知)还没有被移植到 LAPACK,因此在例如科学。

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

是否有任何代码可用于具有与 numpy 兼容的“cholupdate”功能的 python?

谢谢!

最佳答案

这是一个 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))

关于python - Python 中的密集 Cholesky 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8636518/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com