Python和Matlab中計(jì)算SVD的差別

計(jì)算SVD的公式:
X=U \Sigma V^h
,其中 ^h 表示共軛轉(zhuǎn)置。

在 matlab 中計(jì)算 SVD, 得到的是 U、V和S:

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

而在 Python 中使用 numpy 計(jì)算 SVD, 得到的是U、S 的對角線數(shù)組和 V^h, 如果想要得到和 matlab 一致的結(jié)果, 需要將 S放回0矩陣?yán)铮?jì)算 V^h 的共軛轉(zhuǎn)置:

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'); 對應(yīng)于 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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容