2024-04-25 14:08:40 发布
网友
我正在学习这个post和这个post。你知道吗
我试图用Python,NumPy将计算重现为post。你知道吗
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)给出了与此post非常不同的结果。你知道吗
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使*执行矩阵乘法:
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
.T
H*H.H
有两个问题。首先,你没有变换乘数。其次,你使用的是元素乘法而不是矩阵乘法。你知道吗
以下是如何解决这两个问题:
或者,可以使用
np.matrix
使*
执行矩阵乘法:如果矩阵包含复数,则应使用共轭转置(
.H
)而不是转置(.T
)。我选择不这样做是为了避免混淆符号(H*H.H
)。你知道吗相关问题 更多 >
编程相关推荐