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) का बैच्ड संस्करण उपयोग करता है जो लूप की तुलना में काफी तेज़ होता है।