Python 特征向量:numpy.linalg、scipy.linalg 和 scipy.sparse.linalg 之间的差异

2024-06-08

Scipy 和 Numpy 具有三个不同的函数来查找给定方阵的特征向量,它们是:

  1. numpy.linalg.eig(a) http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.eig.html#numpy.linalg.eig
  2. scipy.linalg.eig(a) http://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.eig.html#scipy.linalg.eig, and
  3. scipy.sparse.linalg.eig(A, k) http://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.eigs.html#scipy.sparse.linalg.eigs

特别关注我在最后两个中留下的所有可选参数都保留默认值的情况a/A是实值,我很好奇这三个之间的差异,这些差异在文档中是不明确的 - 特别是:

  • 为什么(3)有一个注释找不到all特征向量?
  • Why must另外两个计算所有解决方案 - 为什么他们不采取k争论?
  • (1) 有注释说特征值不按特定顺序返回; (3) 有一个可选参数来控制顺序。 (2)对此有任何保证吗?
  • (3) 是否假设A稀疏吗? (从数学上来说,而不是表示为 scipy 稀疏矩阵)如果这个假设不成立,它会效率低下,甚至给出错误的结果吗?
  • 在这些因素中进行选择时我还应该考虑其他因素吗?

第三个的特殊行为与兰佐斯算法 http://en.wikipedia.org/wiki/Lanczos_algorithm,这对于稀疏矩阵非常有效。的文档scipy.sparse.linalg.eig说它使用 ARPACK 的包装器,而 ARPACK 又使用“隐式重新启动 Arnoldi 方法 (IRAM),或者在对称矩阵的情况下,使用 Lanczos 算法的相应变体”。(1) http://en.wikipedia.org/wiki/ARPACK.

现在,Lanczos 算法具有对于大特征值更有效的特性(事实上,它使用最大特征值):

在实践中,这个简单的算法对于以下情况并不能很好地工作: 计算非常多的特征向量,因为任何舍入误差 往往会引入更重要的微小成分 特征向量回到计算中,降低了计算的准确性 计算。(2) http://en.wikipedia.org/wiki/Lanczos_algorithm

因此,虽然 Lanczos 算法只是一个近似值,但我猜其他两种方法使用 algos 来找到exact特征值——似乎所有特征值,这可能也取决于所使用的算法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 特征向量:numpy.linalg、scipy.linalg 和 scipy.sparse.linalg 之间的差异 的相关文章

随机推荐