一个快速(也许是幼稚的)问题。考虑以下代码,其中Sig
是对称 PSD 矩阵。
VectorXf c=Sig.ldlt().vectorD();
int p=Sig.cols();
MatrixXf b=MatrixXf::Identity(p,p);
Sig.ldlt().solveInPlace(b);
Cholesky 分解Sig
在这里执行了多少次?如果上面的答案不止一次,我需要 D 向量和 的逆向量Sig
。在特征中获得两者的最快方法是什么(例如,没有多余的计算)?
有两个cholesky 分解,每个ldlt()
调用一个。该ldlt()
函数返回一个LDLT对象。从那里你可以得到所有涉及 Cholesky 分解的矩阵。
LDLT<MatrixXf> chol = Sig.ldlt();
VectorXf c = chol.vectorD();
int p = Sig.cols();
MatrixXf b = MatrixXf::Identity(p, p);
b = chol.solve(b);