我正在将一个脚本从Matlab翻译成Python,其中有一个矩阵VarCov,我得到了它的Cholesky分解。 有时,由于浮点近似,一个应该是正偏微分(PD)的矩阵不是,我必须在对角线上加一个小数值。 以下是Matlab代码:
[CholeskyUpper,pd] = chol(VarCov);
while pd
VarCov = VarCov + 0.0001 * eye(size(VarCov,1));
[CholeskyUpper,pd] = chol(VarCov);
end
Matlab很方便,因为它可以在进行Cholesky分解时返回矩阵是否为PD。这样做时不会引发错误。 在Python(scipy)中,它似乎只返回一个错误。 有没有一种方法可以在不需要计算特征值的情况下完成类似Matlab的工作?在
沙西尝试了以下技巧:
^{pr2}$这是最好的办法吗?在
我最终找到的最快、最简单的方法是直接使用scipy的lapack函数:
此函数的工作方式类似于Matlab版本,如果矩阵不是正定的,则重新展开分解和int>;0。在
相关问题 更多 >
编程相关推荐