Python - linalg.eigsh 如何找到*所有*特征向量?

Python - How can linalg.eigsh find *all* the eigenvectors?

我正在使用 linalg.eigshhere:

文档页面上的示例代码
import scipy.sparse.linalg as sp
import numpy as np

id = np.eye(13)
vals, vecs = sp.eigsh(id, k=6)

len(vals)
# 6
len(vecs)
# 13

我要求它提供 6 个特征值 (k=6),它确实 return 6,但它给了我 13 个(即 all) 特征向量。
在文档中,就在谈到 k 时,它说:

The number of eigenvalues and eigenvectors desired. k must be smaller than N. It is not possible to compute all eigenvectors of a matrix.

事实上,我认为 eighsh 背后的 Lanczos 方法的速度是因为它只找到了特征向量的一个子集。

那么如何才能return所有的特征向量呢?

您对结果的解释有误。特征向量是 vecs,但您计算的是行。 vecs 正如预期的那样有六列。

不是; vecs 是一个 13 x 6 矩阵。特征向量n为:

vecs[:, n]