NumPy का numpy.linalg.matrix_rank() फंक्शन सिंगुलर वैल्यू डीकंपोजिशन (SVD) का उपयोग करके मैट्रिक्स की रैंक निकालता है। रैंक उन सिंगुलर मानों की संख्या है जो थ्रेशोल्ड tol
सिंटैक्स और पैरामीटर्स
numpy.linalg.matrix_rank(A, tol=None, hermitian=False)
- A: इनपुट मैट्रिक्स या मैट्रिक्स स्टैक (..., M, N)।
- tol: थ्रेशोल्ड; इससे कम सिंगुलर मान शून्य माने जाते हैं। डिफ़ॉल्ट:
S.max() * max(M, N) * eps। - hermitian: यदि True, मैट्रिक्स हर्मिटियन माना जाता है (तेज़ SVD)।
- वापसी: रैंक (इंट या ऐरे स्टैक के लिए)।
उदाहरण: रैंक-डेफिसिट मैट्रिक्स
import numpy as np
from numpy.linalg import matrix_rank
# 5x5 आइडेंटिटी मैट्रिक्स (फुल रैंक = 5)
arr = np.eye(5)
print("मूल ऐरे (आइडेंटिटी 5x5):\n", arr)
print("\nडायमेंशन्स:", arr.ndim)
print("डेटा टाइप:", arr.dtype)
print("आकार:", arr.shape)
# फुल रैंक
rank_full = matrix_rank(arr)
print("\nफुल रैंक:", rank_full)
# रैंक-डेफिसिट बनाएं: अंतिम विकर्ण एलिमेंट को 0 करें
arr[-1, -1] = 0.
print("\nअपडेटेड ऐरे (अंतिम विकर्ण 0):\n", arr)
# रैंक-डेफिसिट रैंक
rank_deficit = matrix_rank(arr)
print("\nरैंक-डेफिसिट रैंक:", rank_deficit)
आउटपुट
मूल ऐरे (आइडेंटिटी 5x5):
[[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]]
डायमेंशन्स: 2
डेटा टाइप: float64
आकार: (5, 5)
फुल रैंक: 5
रैंक-डेफिसिट रैंक: 4
SVD और रैंक
मैट्रिक्स A का SVD: A = U Σ Vᴴ
जहां Σ विकर्ण मैट्रिक्स है जिसमें सिंगुलर मान σ₁ ≥ σ₂ ≥ ... ≥ σᵣ > 0 हैं।
रैंक = गैर-शून्य सिंगुलर मानों की संख्या (थ्रेशोल्ड tol से ऊपर)।
टॉलरेंस (tol) का प्रभाव
# खराब कंडीशन वाला मैट्रिक्स
A = np.array([[1, 1], [1, 1.0000001]])
print("डिफ़ॉल्ट tol:", np.linalg.matrix_rank(A))
print("tol=1e-10:", np.linalg.matrix_rank(A, tol=1e-10))
print("tol=1e-5:", np.linalg.matrix_rank(A, tol=1e-5))
print("tol=0.1:", np.linalg.matrix_rank(A, tol=0.1))
सिंगुलर मान देखें
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # रैंक 2
U, s, Vh = np.linalg.svd(A)
print("सिंगुलर मान:", s)
print("रैंक (डिफ़ॉल्ट):", np.linalg.matrix_rank(A))
print("रैंक (tol=1e-10):", np.linalg.matrix_rank(A, tol=1e-10))
स्टैक के लिए रैंक
# मैट्रिक्स स्टैक
stack = np.array([
[[1, 0], [0, 1]], # रैंक 2
[[1, 2], [2, 4]], # रैंक 1
[[0, 0], [0, 0]] # रैंक 0
])
ranks = np.linalg.matrix_rank(stack)
print("स्टैक रैंक्स:", ranks) # [2 1 0]
उपयोग के मामले
- रैखिक सिस्टम की हल करने योग्यता जांचना।
- PCA में मुख्य घटकों की संख्या निर्धारित करना।
- कंट्रोल थ्योरी में कंट्रोलेबिलिटी/ऑब्जर्वेबिलिटी।
- कम्प्रेस्ड सेंसिंग में स्पार्सिटी माप।
- न्यूरल नेटवर्क वेट मैट्रिक्स विश्लेषण।
नोट
डिफ़ॉल्ट tol मशीन प्रिसिजन पर आधारित होता है। विशिष्ट अनुप्रयोगों के लिए (जैसे संख्यात्मक शोर वाला डेटा), डोमेन ज्ञान के आधार पर कस्टम tol सेट करें।