提问人:galib 提问时间:8/11/2023 最后编辑:galib 更新时间:8/17/2023 访问量:64
不同的矩阵乘法导致MATLAB和Python导致不同的特征向量
Different matrix multiplication result in MATLAB and Python leads different eigenvectors
问:
我正在尝试将我的MATLAB代码转换为Python。我必须将两个矩阵相乘并计算乘法结果的特征向量和特征值。下面是两个矩阵
P = [0.153833459882762 0.733552631578947;
-0.911184210526316 -0.153833459882762];
Q = [0.649519052838329 3.09722222222222;
-3.84722222222222 -0.649519052838329];
我在MATLAB中得到以下结果
>>PQ = P*Q
PQ =
-2.72222222222222 0
-1.11022302462516e-16 -2.72222222222222
>>[eigvec, eigval] = eig(PQ)
eigvec =
0 0.983547166232033
1 0.180651520328333
eigval =
-2.72222222222222 0
0 -2.72222222222222
Python 使用 PyTorch 给出以下结果
import torch
P = torch.tensor([[0.153833459882762, 0.733552631578947],
[-0.911184210526316, -0.153833459882762]],dtype = torch.complex64)
Q = torch.tensor([[0.649519052838329, 3.09722222222222],
[-3.84722222222222, -0.649519052838329]],dtype = torch.complex64)
PQ = P@Q
print(PQ)
torch.linalg.eig(PQ)
输出是
tensor([[-2.7222e+00+0.j, 2.9802e-08+0.j],
[ 1.1921e-07+0.j, -2.7222e+00+0.j]])
torch.return_types.linalg_eig(
eigenvalues=tensor([-2.7222+0.j, -2.7222+0.j]),
eigenvectors=tensor([[0.-0.j, 1.+0.j],
[1.+0.j, 0.-0.j]]))
使用 NumPy 的特征值和特征向量为
import numpy as np
np.linalg.eig(P@Q)
numpy 的 EIG 结果为
(array([-2.7222+0.j, -2.7222+0.j], dtype=complex64),
array([[ 0.4472-0.j, -0.4472+0.j],
[ 0.8944+0.j, 0.8944+0.j]], dtype=complex64))
很明显,MATLAB 和 Python 的乘法结果是不同的。此外,我还为 MATLAB、Pytorch 和 Numpy 提供了不同的特征向量。Python 和 MATLAB 之间的区别可能是因为浮点运算的数值精度。但是,它正在完全改变结果。为什么 Pytorch 和 Numpy 具有不同的特征向量?有没有技术可以将 Python 的结果与 MATLAB 的结果保持一致?
答: 暂无答案
评论
complex64
P
Q
float64
complex128
complex128