我试图找出一种比使用scipy.sparse.linalg.eigsh更快的方法来计算非常大且稀疏的邻接矩阵的所有特征值和特征向量,据我所知,此方法仅使用稀疏性和矩阵的对称属性。邻接矩阵也是二进制的,这使我认为有一种更快的方法可以实现。
我创建了一个随机的1000x1000稀疏邻接矩阵,并在x230 ubuntu 13.04笔记本电脑上比较了几种方法:
- scipy.sparse.linalg.eigs:0.65秒
- scipy.sparse.linalg.eigsh:0.44秒
- scipy.linalg.eig:6.09秒
- scipy.linalg.eigh:1.60秒
对于稀疏的eigs和eigsh,我将所需特征值和特征向量的数量k设置为矩阵的秩。
问题始于更大的矩阵-在9000x9000矩阵上,scipy.sparse.linalg.eigsh花了45分钟!