numpy - 为什么特征向量与对应特征值的乘积不等于原矩阵与特征向量的乘积?

标签 numpy linear-algebra matrix-multiplication eigenvalue eigenvector

当我用一个矩阵乘以一个特征向量时,它应该产生与将该特征向量乘以其相应的特征值相同的输出。我正在尝试验证我的特征向量和特征值是否按宣传的那样工作,但输出似乎不正确。

cov_matrix = np.cov(scaled_data)
eig_vals, eig_vecs = np.linalg.eigh(cov_matrix)

a = cov_matrix.dot(eig_vecs[:, 0])
b = eig_vecs[:, 0] * eig_vals[0]
当我打印 a 和 b 时,它们的形状相同,但它们的值都不同。这里出了什么问题?

最佳答案

尝试以下操作:

import numpy as np

np.random.seed(42) # for reproducibility
A = np.random.random((10,10)) + np.random.random((10,10)) * 1j
eig_vals, eig_vecs = np.linalg.eigh(A)

np.allclose(A @ eig_vecs[:, 0], eig_vals[0] * eig_vecs[:, 0])
>>> False
请记住,np.linalg.eigh返回复数 Hermitian(共轭对称)或实对称矩阵的特征值和特征向量。所以对于厄密矩阵:
A = (A + A.T.conj())/2  # Here A is forced Hermitian now
eig_vals, eig_vecs = np.linalg.eigh(A)

print(np.allclose(A @ eig_vecs[:, 0], eig_vals[0] * eig_vecs[:, 0]))
>>> True
如果 cov_matrix 在对角化之前检查是对称的,类似于 np.allclose(cov_matrix, cov_matrix.T.conj()) .如果没有,您可以使用 np.linalg.eig .

关于numpy - 为什么特征向量与对应特征值的乘积不等于原矩阵与特征向量的乘积?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62971620/

相关文章:

c++ - 到 "transpose-conjugate"的最快方法

python - Pandas 在多个大型数据帧中找到共同的 NA 记录

arrays - 变量矩阵 NumPy 的值

c++ - Eigen 稀疏矩阵行列式为零

python - `solve` 相当于 `pinv` 吗?

java - SVG 线性渐变比例和平移问题

matrix - 行优先顺序对于矩阵向量乘法是否更有效?

performance - 在哪里可以找到某些 Numpy 方法的效率 O(n)?

python - 简化 numpy argmin 的愚蠢循环

python - numpy.linalg.eig 如何决定返回特征值的顺序?