python - python中的特征值和向量计算错误
问题描述
我正在尝试以特定格式获取任何矩阵“X”的特征向量和值。我使用该linalg
函数来获取特征对,但预期的输出格式与我的结果不同。例如,v
和e
表示特征值和特征向量。v1 = 1
, e1 = [1,0,0]
, v2 = 2
, e2 = [0,1,0]
, v3 = 3
, e3 = [0,0,1]
.
所以在这个例子中,矩阵 X 的特征对应该是Ep =[(1, [1,0,0]) (2, [0,1,0]), (3, [0,0,1])]
。这里P[0]
表示第一个特征对(1,[1,0,0])
,其中特征值为 1,特征向量为[1,0,0]
。
你能帮我进一步编码这部分吗?
e,v = np.linalg.eigh(X)
解决方案
np.linalg.eigh
首先,应该注意np.linalg.eigh
计算 Hermitian 矩阵的特征值——这不适用于所有矩阵。如果你想计算任何矩阵的特征值,X
你可能应该切换到类似的东西np.linalg.eig
:
import numpy as np
L = np.diag([1,2,3])
V = np.vstack(([1,0,0],[0,1,0],[0,0,1]))
# X = V@L@V.T (eigendecomposition)
X = V@L@V.T
w,v = np.linalg.eig(X)
assert (np.diag(w) == L).all()
assert (v == V).all()
特征对
要构造特征对,只需使用一些列表推导:
import numpy as np
# X = V@L@V.T (eigendecomposition)
X = np.diag([1,2,3])
w,v = np.linalg.eig(X)
Ep = [(val,vec.tolist()) for val,vec in zip(w,v)]
享受!
推荐阅读
- ansible - Ansible + JMESPath:包含与嵌套数据匹配时返回键的名称
- r - 对每行 data.table 运行回归
- python - 根据另一个数据框中的多个位置填充表格
- list - 两个列表:一个字典 - 将一个列表(值)中的项目插入字典中的键
- java - 尝试创建单例时出现 getInstance() 错误
- powerbi - 如何在 Power BI 中添加小时到日期层次结构
- python - 如何在 Python (Flask) 应用程序中捕获 psycopg2.errors.UniqueViolation 错误?
- python - 每次我使用 python 时都需要激活 myenv 才能使用包
- c# - Linq to XML 完整的 Child Element XL 结构
- windows - 为什么在 VS Code 终端上工作时“ls”命令在 Windows CMD 上不起作用?