【问题标题】:Whats the fastest way to calculate the eigenvalues and eigenvectors of a 2D real symetrical Matrix计算二维实对称矩阵的特征值和特征向量的最快方法是什么
【发布时间】:2020-02-27 20:35:50
【问题描述】:

除了计算二维实对称矩阵的特征值和特征向量之外,还有没有更快的方法:

N = 10101
S = np.random.random((N,N))
S = (S + S.T)/2

eigenValues, eigenVectors = np.linalg.eig(S)
idx = eigenValues.argsort()[::-1]

eigenValues = eigenValues[idx]
eigenVectors = eigenVectors[:,idx]

这对我来说太长了

【问题讨论】:

标签: python numpy matrix eigenvalue


【解决方案1】:

我会使用np.linalg.eigh,因为它是为真正的对称矩阵设计的,并且会使用一种特殊的算法。另一个好处是返回的特征值是按升序排序的,所以你不需要使用argsort()

N = 1010 的速度比较,所以我不会永远等待:

eig_vals, eig_vects = np.linalg.eig(S)
# 628 ms ± 45.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

eig_vals, eig_vects = np.linalg.eigh(S)
# 89.1 ms ± 2.9 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

from scipy import linalg as la
eig_vals, eig_vects = la.eigh(S)
# 346 ms ± 10.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

np.linalg.eigh 是目前最快的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-11
    • 2017-04-10
    • 2012-08-08
    • 1970-01-01
    • 2018-10-31
    • 2014-10-30
    • 2012-08-23
    相关资源
    最近更新 更多