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

Python में एक साथ कई मैट्रिक्स का इनवर्स निकालें

NumPy का numpy.linalg.inv() फंक्शन मैट्रिक्स के स्टैक (बैच) का इनवर्स एक साथ निकाल सकता है। यह 3D ऐरे (..., M, M) को इनपुट के रूप में लेता है और प्रत्येक मैट्रिक्स का इनवर्स निकालता है।

सिंटैक्स

numpy.linalg.inv(a)
  • a: वर्ग मैट्रिक्स का स्टैक, आकार (..., M, M)।
  • वापसी: इनवर्स मैट्रिक्स का स्टैक, समान आकार (..., M, M)।

उदाहरण: दो 2×2 मैट्रिक्स का बैच इनवर्स

import numpy as np
from numpy.linalg import inv

# दो 2x2 मैट्रिक्स का स्टैक: आकार (2, 2, 2)
arr = np.array([
    [[1., 2.], [3., 4.]],   # मैट्रिक्स 1
    [[1, 3], [3, 5]]        # मैट्रिक्स 2
])

print("स्टैक आकार:", arr.shape)
print("मैट्रिक्स 1:\n", arr[0])
print("मैट्रिक्स 2:\n", arr[1])

# बैच इनवर्स
inv_stack = np.linalg.inv(arr)
print("\nइनवर्स स्टैक आकार:", inv_stack.shape)
print("इनवर्स 1:\n", inv_stack[0])
print("इनवर्स 2:\n", inv_stack[1])

आउटपुट

स्टैक आकार: (2, 2, 2)
मैट्रिक्स 1:
 [[1. 2.]
 [3. 4.]]
मैट्रिक्स 2:
 [[1. 3.]
 [3. 5.]]
इनवर्स स्टैक आकार: (2, 2, 2)
इनवर्स 1:
 [[-2.   1. ]
 [ 1.5 -0.5]]
इनवर्स 2:
 [[-1.25  0.75]
 [ 0.75 -0.25]]

सत्यापन

# प्रत्येक मैट्रिक्स के लिए A @ A⁻¹ = I जांचें
for i in range(2):
    A = arr[i]
    A_inv = inv_stack[i]
    identity = A @ A_inv
    print(f"मैट्रिक्स {i+1}: A @ A⁻¹ = I ? {np.allclose(identity, np.eye(2))}")

बड़े बैच के साथ प्रदर्शन


import time

# 1000 मैट्रिक्स का बैच (3x3)
batch = np.random.randn(1000, 3, 3)

start = time.time()
inv_batch = np.linalg.inv(batch)
elapsed = time.time() - start
print(f"1000 मैट्रिक्स इनवर्स समय: {elapsed:.4f}s")

# लूप में करने की तुलना में बहुत तेज़

ब्रॉडकास्टिंग नियम

  • इनपुट आकार: (..., M, M) जहां ... कोई भी बैच आकार हो सकता है।
  • उदाहरण: (5, 3, 3), (2, 4, 3, 3), (10, 10, 2, 2)।
  • प्रत्येक (M, M) मैट्रिक्स स्वतंत्र रूप से इनवर्ट होती है।

सिंगुलर मैट्रिक्स हैंडलिंग


# बैच में सिंगुलर मैट्रिक्स होने पर LinAlgError
batch_with_singular = np.array([
    [[1, 2], [3, 4]],      # इनवर्टिबल
    [[1, 2], [2, 4]]       # सिंगुलर (डिटरमिनेंट 0)
])

try:
    np.linalg.inv(batch_with_singular)
except np.linalg.LinAlgError as e:
    print("एरर:", e)

pinv के साथ तुलना


# pinv भी बैच मोड में काम करता है
pinv_batch = np.linalg.pinv(batch)
print("pinv बैच आकार:", pinv_batch.shape)  # समान (1000, 3, 3)

उपयोग के मामले

  • बैच ऑप्टिमाइजेशन समस्याएं।
  • कंप्यूटर विजन में मल्टीपल होमोग्राफी इनवर्स।
  • डीप लर्निंग में बैच मैट्रिक्स ऑपरेशन्स।
  • कंट्रोल थ्योरी में टाइम-वेरिंग सिस्टम्स।

नोट

बैच इनवर्स NumPy 1.8+ में सपोर्टेड है। यह अंतर्निहित BLAS/LAPACK रूटीन (GETRF + GETRI) का बैच्ड संस्करण उपयोग करता है जो लूप की तुलना में काफी तेज़ होता है।

  1. - पायथन में 2 नॉर्म का उपयोग करके मैट्रिक्स की कंडीशन संख्या निकालना

    रैखिक बीजगणित में मैट्रिक्स की कंडीशन संख्या निकालने के लिए, पायथन में numpy.linalg.cond() विधि का उपयोग करें। यह विधि p के मान के आधार पर सात अलग-अलग नॉर्म में से एक का उपयोग करके कंडीशन संख्या लौटाने में सक्षम है। यह मैट्रिक्स की कंडीशन संख्या लौटाता है। यह अनंत हो सकता है। x की कंडीशन संख्या को

  1. - पायथन में फ्रोबेनियस नॉर्म का उपयोग करके मैट्रिक्स की कंडीशन संख्या निकालना

    रैखिक बीजगणित में मैट्रिक्स की कंडीशन संख्या निकालने के लिए, पायथन में numpy.linalg.cond() विधि का उपयोग करें। यह विधि p के मान के आधार पर सात अलग-अलग नॉर्म में से एक का उपयोग करके कंडीशन संख्या लौटाने में सक्षम है। यह मैट्रिक्स की कंडीशन संख्या लौटाता है। यह अनंत हो सकता है। x की कंडीशन संख्या को

  1. - पायथन में जटिल हर्मिटियन या वास्तविक सममित मैट्रिक्स के आइगेनवैल्यू निकालना

    जटिल हर्मिटियन या वास्तविक सममित मैट्रिक्स के आइगेनवैल्यू निकालने के लिए, numpy.eigvalsh() विधि का उपयोग करें। यह विधि आइगेनवैल्यू को आरोही क्रम में लौटाती है, प्रत्येक को उसकी बहुलता के अनुसार दोहराया जाता है। पहला पैरामीटर a एक जटिल-या वास्तविक-मूल्य मैट्रिक्स है जिसके आइगेनवैल्यू की गणना की जानी