您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在python中查找特征值/向量的最快方法是什么?

在python中查找特征值/向量的最快方法是什么?

**如果你的矩阵是稀疏的,然后使用从构造函数实例化矩阵 scipy.sparse 然后使用类似的特征向量/特征值算法 spicy.sparse.linalg 。从性能的角度来看,这具有两个优点:

您的矩阵是由Spicer.sparse构造函数构建的,它与稀疏度的比例将变小。

稀疏矩阵( eigseigsh )的特征值/特征向量方法接受一个可选参数 kk 是要返回的特征向量/特征值对的数量。几乎总是需要大于99%的方差的数目远远小于可以 事后 验证的列数;换句话说,您可以告诉方法不要计算并返回所有特征向量/特征值对-除了考虑方差所需的(通常)小的子集之外,您不太可能需要其余部分。

scipy.linalg ,而不是 与NumPy 的同名库。这两个库具有相同的名称,并使用相同的方法名称。然而,性能却有所不同。这种差异是由以下事实造成的: numpy.linalg 是类似LAPACK例程的 不太 忠实的包装器,后者牺牲了一些性能以实现可移植性和便利性(即,遵守 NumPy 设计目标,即整个 NumPy 库应在没有Fortran的情况下构建)编译器)。 linalgSciPy的 ,另一方面是LAPACK和用途更加完整包装 f2py

; 换句话说,不要使用功能做超出您需要的事情。在 scipy.linalg中 ,有几个函数可以计算特征值。差异并不大,尽管通过仔细选择函数来计算特征值,您应该会看到性能提升。例如:

这些功能是否适用于大型矩阵?

我应该是这样 这些是工业强度矩阵分解方法,仅是类似Fortran 例程的薄包装。

我使用linalg库中的大多数方法来分解矩阵,其中的列数通常在5到50之间,并且行数通常超过500,000。无论是 SVD 也不是 特征值方法似乎有这种规模的任何问题的处理矩阵。

使用 SciPylinalg, 您可以使用该库中的 , 和 的几种方法之一,通过一次调用来计算特征向量和特征值。

>>> import numpy as NP
>>> from scipy import linalg as LA

>>> A = NP.random.randint(0, 10, 25).reshape(5, 5)
>>> A
    array([[9, 5, 4, 3, 7],
           [3, 3, 2, 9, 7],
           [6, 5, 3, 4, 0],
           [7, 3, 5, 5, 5],
           [2, 5, 4, 7, 8]])

>>> e_vals, e_vecs = LA.eig(A)
python 2022/1/1 18:27:17 有472人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶