से मेल नहीं खाता एकवचन मूल्य अपघटन एम = यूएसवी * पर विचार करें। फिर एम * एम के eigenvalue अपघटन एम * एम = वी (एस * एस) वी * = वीएस * यू * यूएसवी * देता है। मैं दिखा रहा है कि eigenvectors eigh
समारोह से वापस लौटे svd
समारोह से लौट आए उन जैसे ही हैं द्वारा numpy के साथ इस समानता की पुष्टि करना चाहते:एग्नेवेक्टरों ने numpy के साथ गणना की और svd
import numpy as np
np.random.seed(42)
# create mean centered data
A=np.random.randn(50,20)
M= A-np.array(A.mean(0),ndmin=2)
# svd
U1,S1,V1=np.linalg.svd(M)
S1=np.square(S1)
V1=V1.T
# eig
S2,V2=np.linalg.eigh(np.dot(M.T,M))
indx=np.argsort(S2)[::-1]
S2=S2[indx]
V2=V2[:,indx]
# both Vs are in orthonormal form
assert np.all(np.isclose(np.linalg.norm(V1,axis=1), np.ones(V1.shape[0])))
assert np.all(np.isclose(np.linalg.norm(V1,axis=0), np.ones(V1.shape[1])))
assert np.all(np.isclose(np.linalg.norm(V2,axis=1), np.ones(V2.shape[0])))
assert np.all(np.isclose(np.linalg.norm(V2,axis=0), np.ones(V2.shape[1])))
assert np.all(np.isclose(S1,S2))
assert np.all(np.isclose(V1,V2))
पिछले दावे विफल रहता है। क्यूं कर?
आप जोड़ सकते हैं सभी विकर्ण तत्वों के लिए एक सकारात्मक संख्या, यानी एम 2 = एम + ए * I बनाते हैं, जहां एम 2 पॉजिटिव सेमीफाइडफाइट बनाने के लिए काफी बड़ा होता है। फिर एसवीडी और आठ से बेहतर सहमत होना चाहिए। –