背景:
要在python中处理7000*7000的稀疏矩阵,计算前k小的特征值和相应的特征向量。不想在matlab中做这件事了,所有的数据预处理和展现工作都想在python中完成。然而一般的linalg提供的eig开销太大,要计算所有的特征值和特征向量,这个开销要达到 O(N^3),对于谱聚类来说,这个开销是不能忍受的。
所以要借助稀疏矩阵计算的工具包。
探索过程:
使用scipy.sparse
对于10*10大小的矩阵都没有问题:
import scipy as sp
import scipy.sparse.linalg
import bumpy as np
vals, vecs = sp.sparse.linalg.eigs(np.identity(10), k=6)
但是对于100*100的矩阵就出错了:
vals, vecs = sp.sparse.linalg.eigs(np.identity(100), k=6)
过程当中总是出现错误:
ArpackError: ARPACK error 3: No shifts could be applied during a cycle of the Implicitly restarted Arnoldi iteration. One possibi

本文介绍了在Python环境下,利用scipy.sparse处理大型稀疏矩阵并计算前k个最小特征值的过程。相较于MATLAB,Python结合scipy.sparse在计算效率和内存占用上有优势,尤其是在处理7000*7000的稀疏矩阵时。通过调整参数和使用Arnoldi方法,成功避免了ARPACK错误,实现了高效计算。在MATLAB和Python中进行比较,两者计算速度相当,但Python提供了更多灵活性。

656

被折叠的 条评论
为什么被折叠?



