我试图找出在python中找到稀疏对称和实矩阵行列式的最快方法 . 使用scipy sparse
模块,但真的很惊讶没有行列式功能 . 我知道我可以使用LU分解来计算行列式,但是没有看到一个简单的方法来执行它,因为 scipy.sparse.linalg.splu
的返回是一个对象并且实例化一个密集的L和U矩阵是不值得的 - 我不妨做 sp.linalg.det(A.todense())
where A
是我的scipy稀疏矩阵 .
我也有点惊讶为什么其他人没有面对scipy中有效决定因素计算的问题 . 如何使用 splu
来计算行列式?
我查看了 pySparse
和 scikits.sparse.chlmod
. 后者对我来说现在不实用 - 需要软件包安装,也不确定在我遇到麻烦之前代码的速度有多快 . 有解决方案吗提前致谢 .
2 回答
以下是我作为答案的一部分提供的一些参考资料here . 我认为它们解决了您要解决的实际问题:
notes用于Shogun图书馆的实施
Erlend Aune,Daniel P. Simpson:高维高斯分布中的参数估计,特别是第2.1节(arxiv:1105.5256)
Ilse C.F. Ipsen,Dean J. Lee:行列式近似(arxiv:1105.0437)
Arnold Reusken:大稀疏对称正定矩阵行列式的逼近(arxiv:hep-lat/0008007)
引自幕府将军的笔记:
解决这个问题的“标准”方法是使用cholesky分解,但是如果你不能使用任何新的编译代码,那么你就不走运了 . 最好的稀疏cholesky实现是蒂姆戴维斯的CHOLMOD,它是根据LGPL许可的,因此不适用于scipy本身(scipy是BSD) .