lvc*_*lvc 15 python numpy scipy
Scipy和Numpy在它们之间有三个不同的函数来寻找给定方阵的特征向量,它们是:
特别关注我最后两个留下的所有可选参数都保留其默认值并且a/ A是实值的情况,我很好奇这三个文档之间的差异 - 特别是:
k争论?A稀疏?(从数学上讲,而不是表示为scipy稀疏矩阵)如果这个假设不成立,它可能是效率低下,甚至是错误的结果吗?phi*_*ler 12
第三个特殊行为与Lanczos算法有关,Lanczos算法适用于稀疏矩阵.文档scipy.sparse.linalg.eig称它使用ARPACK包装器,后者又使用"隐式重启Arnoldi方法(IRAM)",或者在对称矩阵的情况下,使用Lanczos算法的相应变体.(1).
现在,Lanczos算法具有对大特征值更有效的特性(事实上,它使用最大特征值):
在实践中,这种简单的算法对于计算很多特征向量不能很好地工作,因为任何舍入误差都会将更重要的特征向量的微小分量引入计算中,从而降低计算的准确性.(2)
因此,虽然Lanczos算法只是一种近似,我猜其他两种方法使用算法来找到确切的特征值 - 看起来所有这些都可能取决于所使用的算法.
以下是您问题的非常规特定部分的答案:
原则上,NumPy和SciPy linalg()例程应该是相同的.两者都在内部使用LAPACK和BLAS例程.`'scipy.sparse``中的实现使用了一种适用于稀疏矩阵的特定算法(即,大多数为零条目的矩阵).如果基质密集,请不要使用此选项.
请注意,从技术上讲,eig()SciPy/NumPy中的实现是不同的,因为两个包都可以使用不同的Lapack/BLAS实现构建.这里的常见选择是标准的Lapack/BLAS,可从netlib,ATLAS,Intel MKL或OpenBLAS获得.