NumPy का numpy.linalg.slogdet() फंक्शन मैट्रिक्स स्टैक के लॉग-डिटरमिनेंट (चिह्न सहित) निकालता है। यह डिटरमिनेंट के लॉग को सीधे गणना करके ओवरफ्लो/अंडरफ्लो से बचाता है।
सिंटैक्स
numpy.linalg.slogdet(a)
- a: इनपुट ऐरे, आकार (..., M, M) — वर्ग मैट्रिक्स का स्टैक।
- वापसी: टपल
(sign, logdet)। - sign: डिटरमिनेंट का चिह्न (+1, -1, 0, या कॉम्प्लेक्स के लिए यूनिट मॉड्यूलस)।
- logdet: डिटरमिनेंट के निरपेक्ष मान का प्राकृतिक लॉग।
महत्वपूर्ण संबंध
det(A) = sign * exp(logdet)
यदि डिटरमिनेंट 0 है: sign = 0, logdet = -inf।
उदाहरण: 3 मैट्रिक्स का स्टैक
import numpy as np
# 3 मैट्रिक्स का स्टैक: (3, 2, 2)
arr = np.array([
[[1, 2], [3, 4]], # डिटरमिनेंट = -2
[[1, 2], [2, 1]], # डिटरमिनेंट = -3
[[1, 3], [3, 1]] # डिटरमिनेंट = -8
])
print("स्टैक आकार:", arr.shape)
print("डायमेंशन्स:", arr.ndim)
print("डेटा टाइप:", arr.dtype)
# डिटरमिनेंट्स
dets = np.linalg.det(arr)
print("\nडिटरमिनेंट्स:", dets)
# लॉग-डिटरमिनेंट्स
sign, logdet = np.linalg.slogdet(arr)
print("\nचिह्न:", sign)
print("लॉग-डिटरमिनेंट:", logdet)
# सत्यापन: sign * exp(logdet) ≈ det
reconstructed = sign * np.exp(logdet)
print("पुनर्निर्मित डिटरमिनेंट:", reconstructed)
print("मेल खाता:", np.allclose(reconstructed, dets))
आउटपुट
स्टैक आकार: (3, 2, 2)
डायमेंशन्स: 3
डेटा टाइप: int64
डिटरमिनेंट्स: [-2. -3. -8.]
चिह्न: [-1. -1. -1.]
लॉग-डिटरमिनेंट: [0.69314718 1.09861229 2.07944154]
पुनर्निर्मित डिटरमिनेंट: [-2. -3. -8.]
मेल खाता: True
चरण-दर-चरण सत्यापन
| मैट्रिक्स | डिटरमिनेंट | चिह्न | लॉग|डेट| | exp(लॉग) | चिह्न×exp |
|---|---|---|---|---|---|
| [[1,2],[3,4]] | -2 | -1 | ln(2)=0.693 | 2 | -2 ✓ |
| [[1,2],[2,1]] | -3 | -1 | ln(3)=1.099 | 3 | -3 ✓ |
| [[1,3],[3,1]] | -8 | -1 | ln(8)=2.079 | 8 | -8 ✓ |
क्यों slogdet? (ओवरफ्लो बचाव)
# बड़ा मैट्रिक्स: डिटरमिनेंट ओवरफ्लो हो सकता है
large_mat = np.random.randn(100, 100) * 10
# सीधा डिटरमिनेंट
try:
det = np.linalg.det(large_mat)
print("डिटरमिनेंट:", det) # अक्सर inf या overflow
except:
print("डिटरमिनेंट ओवरफ्लो")
# slogdet सुरक्षित है
sign, logdet = np.linalg.slogdet(large_mat)
print("लॉग-डिटरमिनेंट:", logdet) # फाइनाइट मान
print("चिह्न:", sign)
उपयोग के मामले
- बहुवेरिएट नॉर्मल लॉग-लाइकलीहुड:
-0.5 * (logdet + (x-μ)ᵀΣ⁻¹(x-μ))। - बेयसियन मॉडल तुलना (मार्जिनल लाइकलीहुड)।
- इनफॉर्मेशन थ्योरी: एन्ट्रॉपी गणना।
- ऑप्टिमाइजेशन: लॉग-बैरियर फंक्शन्स।
नोट
slogdet केवल वर्ग मैट्रिक्स के लिए काम करता है। गैर-वर्ग के लिए, SVD का उपयोग करें: logdet = 2 * sum(log(singular_values))।