背景:
要在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 shif