计算二维实对称矩阵的特征值和特征向量的最快方法是什么

Whats the fastest way to calculate the eigenvalues and eigenvectors of a 2D real symetrical Matrix

除了

之外,还有没有更快的方法来计算二维实对称矩阵的特征值和特征向量?
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]

这对我来说太长了

我会使用 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 是迄今为止最快的。