我可以在 Python 中找到矩阵的特征向量,如下所示:
from numpy import linalg as LA
w, v = LA.eig(np.diag((1, 2, 3)))
但是如何为一个 100*200 的较大矩阵找到最大的两个特征向量呢?
我可以在 Python 中找到矩阵的特征向量,如下所示:
from numpy import linalg as LA
w, v = LA.eig(np.diag((1, 2, 3)))
但是如何为一个 100*200 的较大矩阵找到最大的两个特征向量呢?
没有为非方阵定义特征值分解。最接近的操作是单值分解。非方阵的 SVD 和 EIG 是相关的,因为单个值是矩阵本身的转置的特征值的平方根。
B = A' * A
SVD(A) * SVD(A) ~= EIG(B)
因此,您的问题的一个潜在答案是:
import numpy as np
A = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
B = np.matmul(np.transpose(A), A)
u,s,v = np.linalg.svd(A)
V, D = np.linalg.eig(B)
print(f'Compare s*s to V {s*s - V}')
虽然s不是直接的,A但它的特征值有些相关。