Python和Matlab中计算SVD的差别

计算SVD的公式:
X=U \Sigma V^h
,其中 ^h 表示共轭转置。

在 matlab 中计算 SVD, 得到的是 U、V和S:

m = 10; 
n = 5;
A=randn(m,n);
[U,S,V]=svd(A);

而在 Python 中使用 numpy 计算 SVD, 得到的是U、S 的对角线数组和 V^h, 如果想要得到和 matlab 一致的结果, 需要将 S放回0矩阵里,计算 V^h 的共轭转置:

import numpy as np

m = 10
n = 5
A = np.random.randn(m, n)
U, sdiag, VH = np.linalg.svd(A)
S = np.zeros((m, n))
np.fill_diagonal(S, sdiag)
V = VH.T.conj()

Matlab 中的 [U,S,V] = svd(A,'econ'); 对应于 U, S, Vh = np.linalg.svd(A, full_matrices=False)

参考:
https://numpy.org/doc/stable/reference/generated/numpy.linalg.svd.html
https://stackoverflow.com/questions/50930899/svd-command-in-python-v-s-matlab

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容