NumPy 1.14 - numpy.linalg.matrix_rank()

numpy.linalg.matrix_rank




numpy

numpy.linalg.matrix_rank

numpy.linalg.matrix_rank(M, tol=None, hermitian=False) [source]

एसवीडी विधि का उपयोग करके सरणी का मैट्रिक्स रैंक लौटाएं

सरणी का रैंक उस सरणी के एकवचन मानों की संख्या है जो tol से अधिक है।

संस्करण 1.14 में परिवर्तित: अब मैट्रिस के ढेर पर काम कर सकते हैं

पैरामीटर:

एम : {(एम), (…, एम, एन)} array_like

मैट्रिक के इनपुट वेक्टर या स्टैक

tol : (…) array_like, float, वैकल्पिक

वह सीमा जिसके नीचे SVD मान शून्य माना जाता है। यदि tol कोई नहीं है, और S , M लिए एकवचन मान के साथ एक सरणी है, और eps S डेटाटाइप के लिए एप्सिलॉन मान है, तो tol S.max() * max(M.shape) * eps

संस्करण 1.14 में परिवर्तित: मैट्रिसेस के ढेर के खिलाफ प्रसारित

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

यदि सही है, तो M को हर्मिटियन माना जाता है (यदि वास्तविक-मूल्यवान सममित है), एकवचन मूल्यों को खोजने के लिए एक अधिक कुशल विधि को सक्षम करता है। झूठा करने के लिए चूक।

संस्करण 1.14 में नया।

टिप्पणियाँ

रैंक की कमी का पता लगाने के लिए डिफ़ॉल्ट सीमा M के एकवचन मूल्यों की परिमाण पर एक परीक्षण है। डिफ़ॉल्ट रूप से, हम S.max() * max(M.shape) * eps से कम के एकवचन मानों की पहचान करते हैं जो रैंक की कमी को दर्शाते हैं (ऊपर दिए गए प्रतीकों के साथ)। यह एल्गोरिथ्म MATLAB का उपयोग करता है [1]। यह रैखिक न्यूनतम वर्गों [2] के लिए एसवीडी समाधानों की चर्चा में न्यूमेरिकल व्यंजनों में भी दिखाई देता है।

यह डिफ़ॉल्ट सीमा SVD अभिकलन की संख्यात्मक त्रुटियों के लिए रैंक की कमी लेखांकन का पता लगाने के लिए डिज़ाइन की गई है। कल्पना कीजिए कि M में एक स्तंभ है जो M में अन्य स्तंभों का एक सटीक (फ्लोटिंग पॉइंट में) रैखिक संयोजन है। एसवीडी की M पर गणना करना सामान्य रूप से 0 के बराबर एक विलक्षण मूल्य का उत्पादन नहीं करेगा: 0 से सबसे छोटे एसवीडी मूल्य का कोई भी अंतर एसवीडी की गणना में संख्यात्मक खराबी के कारण होगा। छोटे एसवीडी मूल्यों के लिए हमारी सीमा इस संख्यात्मक गड़बड़ी को ध्यान में रखती है, और डिफ़ॉल्ट थ्रेशोल्ड ऐसे संख्यात्मक रैंक की कमी का पता लगाएगा। दहलीज एक मैट्रिक्स M रैंक की कमी की घोषणा कर सकता है, भले ही M के कुछ स्तंभों का रैखिक संयोजन M किसी अन्य स्तंभ के बराबर न हो, लेकिन केवल संख्यात्मक रूप से M किसी अन्य स्तंभ के बहुत करीब है।

हमने अपनी डिफ़ॉल्ट सीमा को चुना क्योंकि यह व्यापक उपयोग में है। अन्य थ्रेसहोल्ड संभव हैं। उदाहरण के लिए, न्यूमेरिकल व्यंजनों के 2007 संस्करण में कहीं और S.max() * np.finfo(M.dtype).eps / 2. * np.sqrt(m + n + 1.) का एक वैकल्पिक सीमा है। लेखक इस दहलीज का वर्णन "अपेक्षित राउंडऑफ त्रुटि" (पी 71) पर आधारित है।

एसवीडी की गणना में फ्लोटिंग पॉइंट राउंडऑफ त्रुटि के साथ ऊपर की सीमाएं हैं। हालाँकि, आपके पास M में त्रुटि के स्रोतों के बारे में अधिक जानकारी हो सकती है जो आपको प्रभावी रैंक की कमी का पता लगाने के लिए अन्य सहिष्णुता मूल्यों पर विचार करेगी। सहिष्णुता का सबसे उपयोगी उपाय उन कार्यों पर निर्भर करता है जो आप अपने मैट्रिक्स पर उपयोग करने का इरादा रखते हैं। उदाहरण के लिए, यदि आपका डेटा फ्लोटिंग पॉइंट एप्सिलन से अधिक अनिश्चितताओं के साथ अनिश्चित माप से आता है, तो उस अनिश्चितता के निकट सहिष्णुता चुनना बेहतर हो सकता है। सहनशीलता निरपेक्ष हो सकती है यदि अनिश्चितता सापेक्ष के बजाय पूर्ण हो।

संदर्भ

[R7778] MATLAB संदर्भ दस्तावेज, "रैंक" http://www.mathworks.com/help/techdoc/ref/rank.html
[R7878] WH Press, SA Teukolsky, WT Vetterling and BP Flannery, "Numerical Recipes (3rd Edition)", Cambridge University Press, 2007, पृष्ठ 795।

उदाहरण

>>> from numpy.linalg import matrix_rank
>>> matrix_rank(np.eye(4)) # Full rank matrix
4
>>> I=np.eye(4); I[-1,-1] = 0. # rank deficient matrix
>>> matrix_rank(I)
3
>>> matrix_rank(np.ones((4,))) # 1 dimension - rank 1 unless all 0
1
>>> matrix_rank(np.zeros((4,)))
0