Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

Python में मैट्रिक्स स्टैक के लॉग-डिटरमिनेंट निकालें

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-1ln(2)=0.6932-2 ✓
[[1,2],[2,1]]-3-1ln(3)=1.0993-3 ✓
[[1,3],[3,1]]-8-1ln(8)=2.0798-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))।

  1. - पायथन में कॉम्प्लेक्स-वैल्यूड इनपुट के लिए नेचुरल लॉगरिदम निकालें

    नेचुरल लॉगरिदम log एक्सपोनेंशियल फंक्शन का व्युत्क्रम है, ताकि log(exp(x)) = x। नेचुरल लॉगरिदम बेस e में लॉगरिदम है। यह मेथड x का नेचुरल लॉगरिदम एलिमेंट-वाइज लौटाता है। यदि x स्केलर है तो यह स्केलर होता है। पहला पैरामीटर इनपुट मान, ऐरे-जैसा है। दूसरा पैरामीटर out है, जहां परिणाम स्टोर होता है। यदि

  1. पायथन प्रोग्राम: काउंटिंग सॉर्ट पायथन प्रोग्राम: काउंटिंग सॉर्ट

    इस लेख में हम दी गई समस्या के समाधान के बारे में जानेंगे। समस्या कथन हमें एक सरणी दी गई है, हमें काउंटिंग सॉर्ट की अवधारणा का उपयोग करके सरणी को क्रमबद्ध करना है। काउंटिंग सॉर्ट एक तकनीक है जिसमें हम एक विशिष्ट सीमा के बीच कीज़ पर काम करते हैं। इसमें विशिष्ट कुंजी और मान वाले ऑब्जेक्ट की संख्या गिनन

  1. पायथन प्रोग्राम: सरणी रोटेशन पायथन प्रोग्राम: सरणी रोटेशन

    इस लेख में हम दी गई समस्या के समाधान के बारे में जानेंगे। समस्या कथन हमें एक टेक्स्ट और एक पैटर्न दिया गया है, हमें पैटर्न और उसके क्रमपरिवर्तन (या एनाग्राम) की सभी घटनाओं को टेक्स्ट में प्रिंट करना है। उदाहरण # अधिकतम मान MAX = 300 # तुलना def compare(arr1, arr2): for i in range(MAX):