我将cholesky()的结果与matlab的chol()进行了比较.结果与一些行和列互换时存在差异.我试图迭代分解以获得特征值,这种差异似乎是有问题的.
这是我的代码:
import numpy as npfrom scipy.sparse import csr_matrixfrom scipy.sparse import csc_matrixfrom scikits.sparse.cholmod import choleskyA = csr_matrix([[1,2,0],[0,3,[4,5,1,2]])B = (A*A.T)print "B: "print B.todense()for i in range(10): factor = cholesky(B.tocsc()) l = factor.L() #l is lower triangular B = (l.T*l) print l.todense()
第一次迭代的下三角矩阵是:
[[ 2.23606798 0. 0. 0. ][ 0. 3. 0. 0. ][ 0. 1. 2. 0. ][ 1.78885438 5. 0. 3.57770876]]
而matlab的下三角矩阵是:
[2.2361 0 0 0 0 3.0000 0 01.7889 5.0000 3.5777 0 0 1.0000 0 2.0000]
matlab结果似乎是合理的,因为它导致了正确的特征值.我在python中选择稀疏矩阵的类型时做错了什么?
解决方法 cholesky算法使用填充减少算法.因此,它设置了置换矩阵P.因此LL’= PBP’.有关更多信息,请参阅factor documentation.
如果你打印P你得到:
>>> factor.P()array([0,2],dtype=int32)
这正是两个矩阵之间的区别.最后两行和列的排列.
总结以上是内存溢出为你收集整理的python – 稀疏的cholesky分解,具有互换的行和列全部内容,希望文章能够帮你解决python – 稀疏的cholesky分解,具有互换的行和列所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)