You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Numpy与Mathematica特征向量结果差异问题解析及验证

矩阵特征向量计算:Numpy与Mathematica的结果差异解析

计算示例

Numpy代码及结果

from numpy.linalg import eig
import numpy as np

A = np.array([[1,2],[3,4]])
eval, evec = eig(A)

print("Eigenvectors:", evec)

输出结果:

Eigenvectors: [[-0.82456484 -0.41597356]
               [ 0.56576746 -0.90937671]]

Mathematica代码及结果

A = {{1, 2}, {3, 4}};
{eval, evec} = Eigensystem[A];
N[evec]

输出结果:

{{0.457427, 1.}, {-1.45743, 1.}}

差异原因与结论

  1. 特征向量的非唯一性:特征向量的核心性质是,乘以任意非零常数后仍然是原矩阵的特征向量。Numpy返回的是归一化后的特征向量(每个向量的L2范数为1),而Mathematica返回的是将最后一个元素缩放为1的特征向量,二者本质等价。

  2. 存储格式差异:

    • Numpy的eig函数返回的特征向量矩阵是按列存储的,每一列对应一个特征向量;
    • Mathematica的Eigensystem返回的特征向量是按行存储的,每一行对应一个特征向量。

用户最初用Numpy结果画波函数出错,并非结果不正确,只是没有对Numpy返回的特征向量矩阵进行转置,导致用列向量的方式处理了行向量数据。

Numpy中匹配Mathematica格式的方法

如果需要得到和Mathematica格式一致的特征向量,只需两步:

  1. 转置Numpy的特征向量矩阵,将列向量转为行向量;
  2. 按需求缩放特征向量(比如将每个向量的最后一个元素调整为1)。

示例代码:

from numpy.linalg import eig
import numpy as np

A = np.array([[1,2],[3,4]])
eval, evec = eig(A)
# 转置得到行向量形式的特征向量
evec_rows = evec.T
# 将每个特征向量缩放为最后一个元素为1的形式
scaled_evec = evec_rows / evec_rows[:, [-1]]
print("匹配Mathematica格式的特征向量:\n", scaled_evec)

运行后输出:

匹配Mathematica格式的特征向量:
 [[-1.45742711  1.        ]
 [ 0.45742711  1.        ]]

和Mathematica的结果仅顺序不同(特征向量的顺序由特征值顺序决定,二者特征值顺序一致即可)。

内容的提问来源于stack exchange,提问作者Sophile

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 05:22:25