NumPy 1.14 - numpy.linalg.svd()

numpy.linalg.svd




numpy

numpy.linalg.svd

numpy.linalg.svd(a, full_matrices=True, compute_uv=True) [source]

विलक्षण मान अपघटन।

जब a 2D सरणी होती है, तो इसे u @ np.diag(s) @ vh = (u * s) @ vh रूप में u @ np.diag(s) @ vh = (u * s) @ vh , जहाँ u और vh 2D एकात्मक सरणियाँ होती हैं और s a 's एकवचन मानों का 1D सरणी होता a । । जब a उच्च-आयामी होता है, तो एसवीडी को नीचे बताए अनुसार स्टैक्ड मोड में लागू किया जाता है।

पैरामीटर:

a : (…, M, N) array_like

a.ndim >= 2 साथ एक वास्तविक या जटिल सरणी।

full_matrices : बूल, वैकल्पिक

यदि True (डिफ़ॉल्ट), u और vh की आकृतियाँ (..., M, M) और (..., N, N) क्रमशः हैं। अन्यथा, आकार हैं (..., M, K) और (..., K, N) , क्रमशः, जहां K = min(M, N)

compute_uv : बूल, वैकल्पिक

s अतिरिक्त u और vh गणना करना है या नहीं। डिफ़ॉल्ट रूप से सही है।

यह दिखाता है:

u : {(…, M, M), (…, M, K)} सरणी

एकात्मक सारणी। पहले a.ndim - 2 आयामों में इनपुट के समान आकार a । अंतिम दो आयामों का आकार full_matrices के मूल्य पर निर्भर करता है। केवल तभी लौटा जब compute_uv ट्रू है।

s : (…, K) सरणी

वेक्टर (ओं) एकवचन मूल्यों के साथ, प्रत्येक वेक्टर के भीतर अवरोही क्रम में सॉर्ट किया गया। पहले a.ndim - 2 आयामों में इनपुट के समान आकार a

vh : {(…, एन, एन), (…, के, एन)} सरणी

एकात्मक सारणी। पहले a.ndim - 2 आयामों में इनपुट के समान आकार a । अंतिम दो आयामों का आकार full_matrices के मूल्य पर निर्भर करता है। केवल तभी लौटा जब compute_uv ट्रू है।

जन्म देती है:

LinAlgError

यदि SVD अभिकलन अभिसरण नहीं करता है।

टिप्पणियाँ

संस्करण 1.8.0 में परिवर्तित: प्रसारण नियम लागू होते हैं, विवरण के लिए numpy.linalg प्रलेखन देखें।

अपघटन LAPACK दिनचर्या _gesdd का उपयोग करके किया जाता है।

एसवीडी आमतौर पर 2 डी मैट्रिक्स के कारक के लिए वर्णित है ए । उच्च-आयामी मामले पर नीचे चर्चा की जाएगी। 2 डी मामले में, SVD के रूप में लिखा जाता है ए = यू एस वी ^ एच , कहा पे ए = ए , यू = यू , S = \ mathtt {np.diag} (s) तथा वी ^ एच = वीएच । 1 डी सरणी में a और u के विलक्षण मान शामिल u और vh एकात्मक हैं। vh की पंक्तियाँ vh हैं ए ^ एच ए और u के स्तंभ इसके मूल निवासी हैं अ ^ ह । दोनों मामलों में संबंधित (संभवतः गैर-शून्य) eigenvalues s**2 द्वारा दिए गए हैं।

यदि दो से अधिक आयाम हैं, तो प्रसारण नियम लागू होते हैं, जैसा कि एक साथ कई मैट्रिसेस पर रैखिक बीजगणित में समझाया गया है। इसका मतलब है कि SVD "स्टैक्ड" मोड में काम कर रहा है: यह पहले a.ndim - 2 आयामों के सभी सूचकांकों पर a.ndim - 2 और प्रत्येक संयोजन के लिए SVD अंतिम दो सूचकांकों पर लागू होता है। मैट्रिक्स को अपघटन से (u * s[..., None, :]) @ vh या u @ (s[..., None] * vh) । ( @ ऑपरेटर 3.5 से नीचे पायथन संस्करणों के लिए फ़ंक्शन np.matmul द्वारा प्रतिस्थापित किया जा सकता है।)

यदि a matrix ऑब्जेक्ट है (एक ndarray विपरीत), तो सभी रिटर्न मान हैं।

उदाहरण

>>> a = np.random.randn(9, 6) + 1j*np.random.randn(9, 6)
>>> b = np.random.randn(2, 7, 8, 3) + 1j*np.random.randn(2, 7, 8, 3)

पूर्ण एसवीडी, 2 डी मामले के आधार पर पुनर्निर्माण:

>>> u, s, vh = np.linalg.svd(a, full_matrices=True)
>>> u.shape, s.shape, vh.shape
((9, 9), (6,), (6, 6))
>>> np.allclose(a, np.dot(u[:, :6] * s, vh))
True
>>> smat = np.zeros((9, 6), dtype=complex)
>>> smat[:6, :6] = np.diag(s)
>>> np.allclose(a, np.dot(u, np.dot(smat, vh)))
True

कम एसवीडी, 2 डी मामले के आधार पर पुनर्निर्माण:

>>> u, s, vh = np.linalg.svd(a, full_matrices=False)
>>> u.shape, s.shape, vh.shape
((9, 6), (6,), (6, 6))
>>> np.allclose(a, np.dot(u * s, vh))
True
>>> smat = np.diag(s)
>>> np.allclose(a, np.dot(u, np.dot(smat, vh)))
True

पूर्ण SVD, 4D मामले के आधार पर पुनर्निर्माण:

>>> u, s, vh = np.linalg.svd(b, full_matrices=True)
>>> u.shape, s.shape, vh.shape
((2, 7, 8, 8), (2, 7, 3), (2, 7, 3, 3))
>>> np.allclose(b, np.matmul(u[..., :3] * s[..., None, :], vh))
True
>>> np.allclose(b, np.matmul(u[..., :3], s[..., None] * vh))
True

कम SVD, 4D मामले के आधार पर पुनर्निर्माण:

>>> u, s, vh = np.linalg.svd(b, full_matrices=False)
>>> u.shape, s.shape, vh.shape
((2, 7, 8, 3), (2, 7, 3), (2, 7, 3, 3))
>>> np.allclose(b, np.matmul(u * s[..., None, :], vh))
True
>>> np.allclose(b, np.matmul(u, s[..., None] * vh))
True