【发布时间】:2015-09-07 03:11:41
【问题描述】:
我正在尝试在 python 中计算稀疏矩阵的spectral radius。这就是我所拥有的:
from scipy.sparse.linalg import eigs
from scipy import sparse
w = sparse.rand(10, 10, 0.1)
spec_radius = max(abs(eigs(w)[0]))
w 的值被缩放到[-1,1] 的范围内。但是,每次运行该命令都会给出不同的结果:
>>> print max(abs(eigs(w)[0]))
4.51859016293e-05
>>> print max(abs(eigs(w)[0]))
4.02309443625e-06
>>> print max(abs(eigs(w)[0]))
3.7611221426e-05
什么给了?我以为每次都是一样的。我是否误解了这些命令的工作原理?
【问题讨论】:
-
在打印命令中使用“w1”;上面你定义的“w” - 这只是一个错字吗?如果不是,“w1”是什么?
-
打错字了,我来改一下
-
我用你的代码尝试了不同的 w。如果 "max(abs(eigs(w)[0]))" 大于 0.01 左右,它工作得很好,并且总是获得相同的输出。但是,如果 "max(abs(eigs(w)[0]))" 远小于 0 - 如您的示例中那样 - 则获得确实不同的输出。特征值是使用 The Implicitly Restarted Arnoldi Method 计算的,这似乎是一个迭代过程。因此,我的猜测是,当特征值接近零时会遇到问题,这只是一个数值问题。
-
啊,那一定是罪魁祸首。在我的实际代码中,在找到特征值之前,w 的值被缩放到 [-1,1] 的范围内。
标签: python scipy sparse-matrix eigenvalue