正确构建与还原特征分解:NumPy 中特征向量矩阵的列优先约定详解
本文详解为何用 NumPy 进行特征分解重建时 eigenvectors 顺序和方向“看似错乱”核心在于明确 eig() 的输入/输出约定——特征向量必须以列而非行组织且数值精度、排序与标量倍数等数学本质需同步理解。 本文详解为何用 numpy 进行特征分解重建时 eigenvectors 顺序和方向“看似错乱”核心在于明确 eig() 的输入/输出约定——特征向量必须以**列而非行**组织且数值精度、排序与标量倍数等数学本质需同步理解。在使用 NumPy 实现矩阵的特征分解Eigen-decomposition及其逆向重构时一个常见却易被忽视的关键点是np.linalg.eig 要求输入的特征向量矩阵必须以列columns形式存储各特征向量而其返回的 eigenvectors 矩阵同样按列组织——即 eigenvectors[:, i] 对应第 i 个特征值 eigenvalues[i] 的特征向量。在原始代码中用户将 evecs 定义为evecs np.array([[6.12e-32, 0.00, 1.0], # ← 这被当作第1行错误应为第1列 [0.71, 0.71, 0.00], # ← 第2行 [-0.71, 0.71, 0.00]]) # ← 第3行这实际构造了一个 3×3 行向量矩阵即每个 eigenvector 是 row但 np.linalg.inv(evecs) 和后续的相似变换 evecs evals inv(evecs) 隐含假设 evecs 是可逆的特征向量基矩阵 —— 而该基矩阵的列才代表坐标系中的基向量。因此未转置直接使用会导致基定义错误进而使重构矩阵 A 的数值性质失准最终 np.linalg.eig(A) 返回的特征向量自然无法与原始输入对齐。? 正确做法是显式转置 evecs使其列对应原始指定的特征向量import numpy as np# 原始意图v1 [6.12e-32, 0.0, 1.0], v2 [0.71, 0.71, 0.0], v3 [-0.71, 0.71, 0.0]evecs np.array([[6.12e-32, 0.00, 1.0], [0.71, 0.71, 0.00], [-0.71, 0.71, 0.00]])evecs evecs.T # ? 关键修正转置 → 每列是一个特征向量evals np.diag([0.6, 0.3, 0.1])# 构建 A V Λ V?1A evecs evals np.linalg.inv(evecs)# 重构特征分解eigenvalues, eigenvectors np.linalg.eig(A)运行后可观察到eigenvalues 仍可能无序如 [0.3, 0.1, 0.6]这是 np.linalg.eig 的默认行为但 eigenvectors[:, 2]对应 eigenvalue 0.6将高度接近原始 v1 [6.12e-32, 0.0, 1.0]数值误差在 1e-47 量级同理其余列也分别与 v2, v3 在浮点精度内一致注意符号可能整体翻转见下文说明。?? 还需注意三个重要事实 RedClaw 百度推出的手机端万能AI Agent助手
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2518333.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!