python - 使用此命令 `np.linalg.eig(H*H)` 计算特征分解是否合适?

标签 python numpy linear-algebra

我正在学习这个post还有这个post .

我正在尝试将计算重现为 post使用 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) 给出了与此 post 截然不同的结果.

为什么会这样?

最佳答案

有两个问题。首先,您没有调换乘数。其次,您使用的是逐元素乘法而不是矩阵乘法。

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

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)。

关于python - 使用此命令 `np.linalg.eig(H*H)` 计算特征分解是否合适?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56731281/

相关文章:

python - 作为 Snakefile 输出的函数或字典理解

c++ - 如何通过内容正则表达式匹配过滤 pcap(例如 tcpdump)文件?

python - 根据 ndarray 中的索引设置值的通用方法?

python - 如何在数组中找到N个连续数字相等?

c++ - 如何在两个 boost::multi_arrays (C++) 之间执行数学运算?

python - python中有没有可以控制每次迭代的数值求解器?

javascript - 我如何根据用户提供的过滤值显示搜索结果?

numpy - 从整数创建 tz 感知 pandas 时间戳对象

javascript - 将向量绘制为直线

python - 使用 BeautifulSoup 提取标签中的内容