Python 使用这个命令“np.linalg.eig(H*H)”计算特征分解是否合适?

Python 使用这个命令“np.linalg.eig(H*H)”计算特征分解是否合适?,python,numpy,linear-algebra,Python,Numpy,Linear Algebra,我正在学习这个和这个 我正试图用Python,NumPy来重现这样的计算 H = np.array([[0.1, 0.3, .4],[0.5 , 0.5, 0.9],[0.1, 0.4, 0.5]]) u, s, vh = np.linalg.svd(H) w, v = np.linalg.eig(H*H) np.linalg.eig(H*H)给出了与此非常不同的结果 为什么会这样?有两个问题。首先,你没有转换乘数。第二,你用元素乘法代替矩阵乘法 以下是解决这两个问题的方法: In [18]:

我正在学习这个和这个

我正试图用Python,NumPy来重现这样的计算

H = np.array([[0.1, 0.3, .4],[0.5 , 0.5, 0.9],[0.1, 0.4, 0.5]])
u, s, vh = np.linalg.svd(H)
w, v = np.linalg.eig(H*H)
np.linalg.eig(H*H)
给出了与此非常不同的结果


为什么会这样?

有两个问题。首先,你没有转换乘数。第二,你用元素乘法代替矩阵乘法

以下是解决这两个问题的方法:

In [18]: np.linalg.eig(np.matmul(H, H.T))
Out[18]:
(array([1.94501343e+00, 1.14315435e-05, 4.49751401e-02]),
 array([[-0.35979589, -0.82953709,  0.42710084],
        [-0.81600749,  0.05780546, -0.57514373],
        [-0.4524143 ,  0.55545183,  0.69770664]]))
或者,您可以使用
np.matrix
使
*
执行矩阵乘法:

In [22]: H = np.matrix([[0.1, 0.3, .4],[0.5 , 0.5, 0.9],[0.1, 0.4, 0.5]])

In [23]: np.linalg.eig(H*H.T)
Out[23]:
(array([1.94501343e+00, 1.14315435e-05, 4.49751401e-02]),
 matrix([[-0.35979589, -0.82953709,  0.42710084],
         [-0.81600749,  0.05780546, -0.57514373],
         [-0.4524143 ,  0.55545183,  0.69770664]]))

如果矩阵包含复数,则应使用共轭转置(
.H
)而不是转置(
.T
)。我选择不这样做是为了避免混淆符号(
H*H.H
)。

我没有读过那些帖子,但你的意思可能是
H@H
这是矩阵乘法<除非
H
np.matrix
类型,否则code>H*H将以乘法广播。你能总结一下你在问题中链接到的三篇文章吗?我觉得这会使这个问题更加完整。谢谢你的回答。有几个元素与原始帖子中的结果不同。例如,原始立柱中的u[2,2](右下角)为0.55545183,而不是0.69770664。